From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: =?utf-8?b?VG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+?= To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: - update to final 1.0.0 upstream release Date: Tue, 09 Jun 2026 12:42:06 GMT Message-ID: <178100892673.1.13767187302824686209.rpms-openssl-fa66cf4b52f1@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: fa66cf4b52f1c3df522bbe6fb45f26e89487eb49 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IGZhNjZjZjRiNTJmMWMzZGY1MjJiYmU2ZmI0NWYy NmU4OTQ4N2ViNDkKQXV0aG9yIDogVG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5v cmc+CkRhdGUgICA6IDIwMTAtMDMtMzBUMDk6Mzc6NDErMDA6MDAKU3RhdHMgIDogKzEyMTg3Ly0x MjM1OSBpbiA4IGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcv cnBtcy9vcGVuc3NsL2MvZmE2NmNmNGI1MmYxYzNkZjUyMmJiZTZmYjQ1ZjI2ZTg5NDg3ZWI0OT9i cmFuY2g9cmViYXNlXzQwYmV0YQoKTG9nOgotIHVwZGF0ZSB0byBmaW5hbCAxLjAuMCB1cHN0cmVh bSByZWxlYXNlCgotLS0KZGlmZiAtLWdpdCBhLy5jdnNpZ25vcmUgYi8uY3ZzaWdub3JlCmluZGV4 IGYxMzNmNmQuLjM5MzBhOWQgMTAwNjQ0Ci0tLSBhLy5jdnNpZ25vcmUKKysrIGIvLmN2c2lnbm9y ZQpAQCAtMSArMSBAQAotb3BlbnNzbC0xLjAuMC1iZXRhNS11c2EudGFyLmJ6Mgorb3BlbnNzbC0x LjAuMC11c2EudGFyLmJ6MgoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTUtY2xlYW5z ZS5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTUtY2xlYW5zZS5wYXRjaApkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggOTJmNzQ0Ni4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJl dGE1LWNsZWFuc2UucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotR3JhY2Vm dWxseSBoYW5kbGUgemVybyBsZW5ndGggaW4gYXNzZW1ibGVyIGltcGxlbWVudGF0aW9ucyBvZiBP UEVOU1NMX2NsZWFuc2UuCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9pYTY0 Y3B1aWQuUy5jbGVhbnNlIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2lhNjRjcHVpZC5TCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vaWE2NGNwdWlkLlMuY2xlYW5zZQkyMDA3LTA3 LTI3IDIwOjAzOjI3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL2lhNjRjcHVpZC5TCTIwMTAtMDItMTIgMTg6MTM6NTIuMDAwMDAwMDAwICswMTAwCi1AQCAt MTMwLDkgKzEzMCwxMSBAQCBPUEVOU1NMX3dpcGVfY3B1OgotIC5nbG9iYWwJT1BFTlNTTF9jbGVh bnNlIwotIC5wcm9jCU9QRU5TU0xfY2xlYW5zZSMKLSBPUEVOU1NMX2NsZWFuc2U6Ci0reyAubWli OwljbXAuZXEJCXA2LHAwPTAscjMzCSAgICAvLyBsZW49PTAKLSAjaWYgZGVmaW5lZChfSFBVWF9T T1VSQ0UpICYmICFkZWZpbmVkKF9MUDY0KQotLXsgLm1taTsJYWRkcDQJCXIzMj0wLHIzMgl9OzsK LSsJYWRkcDQJCXIzMj0wLHIzMgotICNlbmRpZgotKyhwNikJYnIucmV0LnNwbnQJYjAJCX07Owot IHsgLm1pYjsJYW5kCQlyMj03LHIzMgotIAljbXAubGV1CQlwNixwMD0xNSxyMzMJICAgIC8vIGxl bj49MTUKLSAocDYpCWJyLmNvbmQuZHB0awkuTG90CQl9OzsKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL3Blcmxhc20vcHBjLXhsYXRlLnBsLmNsZWFuc2Ugb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vcGVybGFzbS9wcGMteGxhdGUucGwKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9wZXJsYXNtL3BwYy14bGF0ZS5wbC5jbGVhbnNlCTIwMDgtMDEtMTMgMjM6MDE6 MjkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcGVybGFz bS9wcGMteGxhdGUucGwJMjAxMC0wMi0xMiAxODoxMzo1Mi4wMDAwMDAwMDAgKzAxMDAKLUBAIC0x MDEsNiArMTAxLDEzIEBAIG15ICRibmVsciA9IHN1YiB7Ci0gCSIJLmxvbmcJIi5zcHJpbnRmICIw eCV4IiwxOTw8MjZ8JGJvPDwyMXwyPDwxNnwxNjw8MSA6Ci0gCSIJYmNscgkkYm8sMiI7Ci0gfTsK LStteSAkYmVxbHIgPSBzdWIgewotKyAgICBteSAkZiA9IHNoaWZ0OwotKyAgICBteSAkYm8gPSAk Zj1+Ly0vID8gMTIrMiA6IDEyOwkjIG9wdGlvbmFsICJub3QgdG8gYmUgdGFrZW4iIGhpbnQKLSsg ICAgKCRmbGF2b3VyID1+IC9saW51eC8pID8JCSMgR05VIGFzIGRvZXNuJ3QgYWxsb3cgbW9zdCBy ZWNlbnQgaGludHMKLSsJIgkubG9uZwkiLnNwcmludGYgIjB4JVgiLDE5PDwyNnwkYm88PDIxfDI8 PDE2fDE2PDwxIDoKLSsJIgliY2xyCSRibywyIjsKLSt9OwotICMgR05VIGFzc2VtYmxlciBjYW4n dCBoYW5kbGUgZXh0cmRpIHJBLHJTLDE2LDQ4LCBvciB3aGVuIHN1bSBvZiBsYXN0IHR3bwotICMg YXJndW1lbnRzIGlzIDY0LCB3aXRoICJvcGVyYW5kIG91dCBvZiByYW5nZSIgZXJyb3IuCi0gbXkg JGV4dHJkaSA9IHN1YiB7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9wcGNj cHVpZC5wbC5jbGVhbnNlIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3BwY2NwdWlkLnBsCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcHBjY3B1aWQucGwuY2xlYW5zZQkyMDA4LTA5 LTEyIDE2OjQ1OjUzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL3BwY2NwdWlkLnBsCTIwMTAtMDItMTIgMTg6MTM6NTIuMDAwMDAwMDAwICswMTAwCi1AQCAt NjcsNiArNjcsOCBAQCBMb29wOglsd2FyeAlyNSwwLHIzCi0gCSRDTVBMSQlyNCw3Ci0gCWxpCXIw LDAKLSAJYmdlCUxvdAotKwkkQ01QTEkJcjQsMAotKwliZXFsci0KLSBMaXR0bGU6CW10Y3RyCXI0 Ci0gCXN0YglyMCwwKHIzKQotIAlhZGRpCXIzLHIzLDEKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3NwYXJjY3B1aWQuUy5jbGVhbnNlIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL3NwYXJjY3B1aWQuUwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NwYXJjY3B1 aWQuUy5jbGVhbnNlCTIwMDctMDUtMTkgMTk6MjY6NDguMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc3BhcmNjcHVpZC5TCTIwMTAtMDItMTIgMTg6MTM6NTIu MDAwMDAwMDAwICswMTAwCi1AQCAtMjQyLDYgKzI0MiwxMCBAQCBPUEVOU1NMX2NsZWFuc2U6Ci0g I2Vsc2UKLSAJYmd1CS5Mb3QKLSAjZW5kaWYKLSsJY21wCSVvMSwwCi0rCWJuZQkuTGl0dGxlCi0r CW5vcAotKwlyZXRsCi0gCW5vcAotIAotIC5MaXR0bGU6Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9zMzkweGNwdWlkLlMuY2xlYW5zZSBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9zMzkweGNwdWlkLlMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zMzkweGNw dWlkLlMuY2xlYW5zZQkyMDEwLTAxLTE5IDIyOjQwOjU2LjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3MzOTB4Y3B1aWQuUwkyMDEwLTAyLTEyIDE4OjEzOjUy LjAwMDAwMDAwMCArMDEwMAotQEAgLTYyLDYgKzYyLDggQEAgT1BFTlNTTF9jbGVhbnNlOgotIAls Z2hpCSVyMCwwCi0gCWNsZ3IJJXIzLCVyNAotIAlqaAkuTG90Ci0rCWNsZ3IJJXIzLCVyMAotKwli Y3IJOCwlcjE0Ci0gLkxpdHRsZToKLSAJc3RjCSVyMCwwKCVyMikKLSAJbGEJJXIyLDEoJXIyKQot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8veDg2Y3B1aWQucGwuY2xlYW5zZSBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by94ODZjcHVpZC5wbAotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3g4NmNwdWlkLnBsLmNsZWFuc2UJMjAwOS0wNS0xNCAyMDoyNToyOS4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by94ODZjcHVpZC5wbAky MDEwLTAyLTEyIDE4OjEzOjUyLjAwMDAwMDAwMCArMDEwMAotQEAgLTI3OSwxMSArMjc5LDE0IEBA IGZvciAoQEFSR1YpIHsgJHNzZTI9MSBpZiAoLy1ET1BFTlNTTF9JQTMKLSAJJnhvcgkoImVheCIs ImVheCIpOwotIAkmY21wCSgiZWN4Iiw3KTsKLSAJJmphZQkoJmxhYmVsKCJsb3QiKSk7Ci0rCSZj bXAJKCJlY3giLDApOwotKwkmamUJKCZsYWJlbCgicmV0IikpOwotICZzZXRfbGFiZWwoImxpdHRs ZSIpOwotIAkmbW92CSgmQlAoMCwiZWR4IiksImFsIik7Ci0gCSZzdWIJKCJlY3giLDEpOwotIAkm bGVhCSgiZWR4IiwmRFdQKDEsImVkeCIpKTsKLSAJJmpuegkoJmxhYmVsKCJsaXR0bGUiKSk7Ci0r JnNldF9sYWJlbCgicmV0Iik7Ci0gCSZyZXQJKCk7Ci0gCi0gJnNldF9sYWJlbCgibG90IiwxNik7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by94ODZfNjRjcHVpZC5wbC5jbGVh bnNlIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3g4Nl82NGNwdWlkLnBsCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8veDg2XzY0Y3B1aWQucGwuY2xlYW5zZQkyMDA5LTA1LTE0IDIw OjI1OjI5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3g4 Nl82NGNwdWlkLnBsCTIwMTAtMDItMTIgMTg6MTM6NTIuMDAwMDAwMDAwICswMTAwCi1AQCAtMTQ1 LDEyICsxNDUsMTQgQEAgT1BFTlNTTF9jbGVhbnNlOgotIAl4b3IJJXJheCwlcmF4Ci0gCWNtcAlc JDE1LCRhcmcyCi0gCWphZQkuTG90Ci0rCWNtcAlcJDAsJGFyZzIKLSsJamUJLkxyZXQKLSAuTGl0 dGxlOgotIAltb3YJJWFsLCgkYXJnMSkKLSAJc3ViCVwkMSwkYXJnMgotIAlsZWEJMSgkYXJnMSks JGFyZzEKLSAJam56CS5MaXR0bGUKLS0JcmV0Ci0rLkxyZXQ6CXJldAotIC5hbGlnbgkxNgotIC5M b3Q6Ci0gCXRlc3QJXCQ3LCRhcmcxCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRhNS1m aXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhNS1maXBzLnBhdGNoCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwYTU3ZjY3Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0 YTUtZmlwcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMjI1ICswLDAgQEAKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTUvQ29uZmlndXJlLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9D b25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L0NvbmZpZ3VyZS5maXBzCTIwMTAtMDIt MTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9Db25m aWd1cmUJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02NjAsNiArNjYw LDcgQEAgbXkgJGNtbGxfZW5jPSJjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbAotIG15ICRwcm9j ZXNzb3I9IiI7Ci0gbXkgJGRlZmF1bHRfcmFubGliOwotIG15ICRwZXJsOwotK215ICRmaXBzPTA7 Ci0gCi0gCi0gIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChS QzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKLUBAIC04MDYsNiArODA3LDEwIEBAIFBST0NF U1NfQVJHUzoKLSAJCQl9Ci0gCQllbHNpZiAoL14zODYkLykKLSAJCQl7ICRwcm9jZXNzb3I9Mzg2 OyB9Ci0rCQllbHNpZiAoL15maXBzJC8pCi0rCQkJewotKwkJCSRmaXBzPTE7Ci0rCQkgICAgICAg IH0KLSAJCWVsc2lmICgvXnJzYXJlZiQvKQotIAkJCXsKLSAJCQkjIE5vIFJTQXJlZiBzdXBwb3J0 IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KLUBAIC0xMzY4LDYgKzEzNzMsMTEgQEAg JGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRubwotIAotICRjZmxhZ3MuPSIg LURPUEVOU1NMX0JOX0FTTV9NT05UIiBpZiAoJGJuX29iaiA9fiAvLW1vbnQvKTsKLSAKLStpZiAo JGZpcHMpCi0rCXsKLSsJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9G SVBTXG4iOwotKwl9Ci0rCi0gJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9v YmogPX4gL1wubyQvKTsKLSAkZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9c Lm8kLyk7Ci0gJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKLUBA IC0xNTM1LDYgKzE1NDUsMTAgQEAgd2hpbGUgKDxJTj4pCi0gCXMvXkxJQktSQjU9LiovTElCS1JC NT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwotIAlzL15MSUJaTElCPS4qL0xJQlpMSUI9JHdpdGhh cmdzeyJ6bGliLWxpYiJ9LzsKLSAJcy9eWkxJQl9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0kd2l0 aGFyZ3N7InpsaWItaW5jbHVkZSJ9LzsKLSsJaWYgKCRmaXBzKQotKwkJewotKwkJcy9eRklQUz0u Ki9GSVBTPXllcy87Ci0rCQl9Ci0gCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNo YXJlZF90YXJnZXQvOwotIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJr LzsKLSAJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQo U0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9i Zi9iZl9za2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9iZi9iZl9za2V5LmMu ZmlwcwkyMDA4LTExLTEyIDA0OjU3OjUyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2JmL2JmX3NrZXkuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAw MCArMDEwMAotQEAgLTU5LDEwICs1OSwxNSBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNs dWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9ibG93ZmlzaC5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgImJmX2xvY2wuaCIKLSAjaW5jbHVk ZSAiYmZfcGkuaCIKLSAKLS12b2lkIEJGX3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0rRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoQkYp Ci0gCXsKLSAJaW50IGk7Ci0gCUJGX0xPTkcgKnAscmksaW5bMl07Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9iZi9ibG93ZmlzaC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vYmYvYmxvd2Zpc2guaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Jm L2Jsb3dmaXNoLmguZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMwLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JmL2Jsb3dmaXNoLmgJMjAxMC0wMi0xNiAyMjo1 ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMDQsNyArMTA0LDkgQEAgdHlwZWRlZiBzdHJ1Y3Qg YmZfa2V5X3N0Ci0gCUJGX0xPTkcgU1s0KjI1Nl07Ci0gCX0gQkZfS0VZOwotIAotLSAKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0ZV9CRl9zZXRfa2V5KEJGX0tFWSAqa2V5LCBp bnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSsjZW5kaWYKLSB2b2lkIEJGX3Nl dF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwot IAotIHZvaWQgQkZfZW5jcnlwdChCRl9MT05HICpkYXRhLGNvbnN0IEJGX0tFWSAqa2V5KTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JuL2JuLmguZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9ibi9ibi5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v Ym4vYm4uaC5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vYm4vYm4uaAkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAw MDAwMCArMDEwMAotQEAgLTU0MCw2ICs1NDAsMTcgQEAgaW50CUJOX2lzX3ByaW1lX2V4KGNvbnN0 IEJJR05VTSAqcCxpbnQgbgotIGludAlCTl9pc19wcmltZV9mYXN0dGVzdF9leChjb25zdCBCSUdO VU0gKnAsaW50IG5jaGVja3MsIEJOX0NUWCAqY3R4LAotIAkJaW50IGRvX3RyaWFsX2RpdmlzaW9u LCBCTl9HRU5DQiAqY2IpOwotIAotK2ludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhw LCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KTsKLSsKLStpbnQgQk5fWDkzMV9k ZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotKwkJCWNv bnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLSsJ CQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpOwotK2ludCBCTl9Y OTMxX2dlbmVyYXRlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwK LSsJCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwKLSsJ CQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LAotKwkJCUJOX0dFTkNCICpjYik7Ci0rCi0g Qk5fTU9OVF9DVFggKkJOX01PTlRfQ1RYX25ldyh2b2lkICk7Ci0gdm9pZCBCTl9NT05UX0NUWF9p bml0KEJOX01PTlRfQ1RYICpjdHgpOwotIGludCBCTl9tb2RfbXVsX21vbnRnb21lcnkoQklHTlVN ICpyLGNvbnN0IEJJR05VTSAqYSxjb25zdCBCSUdOVU0gKmIsCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9ibi9ibl94OTMxcC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vYm4vYm5feDkzMXAuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JuL2Ju X3g5MzFwLmMuZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JuL2JuX3g5MzFwLmMJMjAxMC0wMi0xNiAyMjo1ODoz MS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMjcyIEBACi0rLyogYm5feDkzMXAuYyAqLwot Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6 Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5T U0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSku ICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRz b24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rLyogWDkuMzEgcm91dGluZXMgZm9yIHBy aW1lIGRlcml2YXRpb24gKi8KLSsKLSsvKiBYOS4zMSBwcmltZSBkZXJpdmF0aW9uLiBUaGlzIGlz IHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHByaW1lcyBwaQotKyAqIChwMSwgcDIsIHExLCBxMikgZnJv bSBhIHBhcmFtZXRlciBYcGkgYnkgY2hlY2tpbmcgc3VjY2Vzc2l2ZSBvZGQKLSsgKiBpbnRlZ2Vy cy4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGJuX3g5MzFfZGVyaXZlX3BpKEJJR05VTSAqcGksIGNv bnN0IEJJR05VTSAqWHBpLCBCTl9DVFggKmN0eCwKLSsJCQlCTl9HRU5DQiAqY2IpCi0rCXsKLSsJ aW50IGkgPSAwOwotKwlpZiAoIUJOX2NvcHkocGksIFhwaSkpCi0rCQlyZXR1cm4gMDsKLSsJaWYg KCFCTl9pc19vZGQocGkpICYmICFCTl9hZGRfd29yZChwaSwgMSkpCi0rCQlyZXR1cm4gMDsKLSsJ Zm9yKDs7KQotKwkJewotKwkJaSsrOwotKwkJQk5fR0VOQ0JfY2FsbChjYiwgMCwgaSk7Ci0rCQkv KiBOQiAyNyBNUiBpcyBzcGVjaWZpY2VkIGluIFg5LjMxICovCi0rCQlpZiAoQk5faXNfcHJpbWVf ZmFzdHRlc3RfZXgocGksIDI3LCBjdHgsIDEsIGNiKSkKLSsJCQlicmVhazsKLSsJCWlmICghQk5f YWRkX3dvcmQocGksIDIpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlCTl9HRU5DQl9jYWxsKGNi LCAyLCBpKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBUaGlzIGlzIHRoZSBtYWluIFg5LjMx IHByaW1lIGRlcml2YXRpb24gZnVuY3Rpb24uIEZyb20gcGFyYW1ldGVycwotKyAqIFhwMSwgWHAy IGFuZCBYcCBkZXJpdmUgdGhlIHByaW1lIHAuIElmIHRoZSBwYXJhbWV0ZXJzIHAxIG9yIHAyIGFy ZQotKyAqIG5vdCBOVUxMIHRoZXkgd2lsbCBiZSByZXR1cm5lZCB0b286IHRoaXMgaXMgbmVlZGVk IGZvciB0ZXN0aW5nLgotKyAqLwotKwotK2ludCBCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChCSUdO VU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwgY29u c3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAotKwkJCWNvbnN0IEJJR05VTSAqZSwg Qk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYikKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJQklH TlVNICp0LCAqcDFwMiwgKnBtMTsKLSsKLSsJLyogT25seSBldmVuIGUgc3VwcG9ydGVkICovCi0r CWlmICghQk5faXNfb2RkKGUpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgp OwotKwlpZiAoIXAxKQotKwkJcDEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCWlmICghcDIpCi0r CQlwMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJdCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJ cDFwMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJcG0xID0gQk5fQ1RYX2dldChjdHgpOwotKwot KwlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAxLCBYcDEsIGN0eCwgY2IpKQotKwkJZ290byBlcnI7 Ci0rCi0rCWlmICghYm5feDkzMV9kZXJpdmVfcGkocDIsIFhwMiwgY3R4LCBjYikpCi0rCQlnb3Rv IGVycjsKLSsKLSsJaWYgKCFCTl9tdWwocDFwMiwgcDEsIHAyLCBjdHgpKQotKwkJZ290byBlcnI7 Ci0rCi0rCS8qIEZpcnN0IHNldCBwIHRvIHZhbHVlIG9mIFJwICovCi0rCi0rCWlmICghQk5fbW9k X2ludmVyc2UocCwgcDIsIHAxLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fbXVs KHAsIHAsIHAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fbW9kX2ludmVyc2Uo dCwgcDEsIHAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fbXVsKHQsIHQsIHAx LCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fc3ViKHAsIHAsIHQpKQotKwkJZ290 byBlcnI7Ci0rCi0rCWlmIChwLT5uZWcgJiYgIUJOX2FkZChwLCBwLCBwMXAyKSkKLSsJCWdvdG8g ZXJyOwotKwotKwkvKiBwIG5vdyBlcXVhbHMgUnAgKi8KLSsKLSsJaWYgKCFCTl9tb2Rfc3ViKHAs IHAsIFhwLCBwMXAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fYWRkKHAsIHAs IFhwKSkKLSsJCWdvdG8gZXJyOwotKwotKwkvKiBwIG5vdyBlcXVhbHMgWXAwICovCi0rCi0rCWZv ciAoOzspCi0rCQl7Ci0rCQlpbnQgaSA9IDE7Ci0rCQlCTl9HRU5DQl9jYWxsKGNiLCAwLCBpKysp OwotKwkJaWYgKCFCTl9jb3B5KHBtMSwgcCkpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoIUJOX3N1 Yl93b3JkKHBtMSwgMSkpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoIUJOX2djZCh0LCBwbTEsIGUs IGN0eCkpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoQk5faXNfb25lKHQpCi0rCQkvKiBYOS4zMSBz cGVjaWZpZXMgOCBNUiBhbmQgMSBMdWNhcyB0ZXN0IG9yIGFueSBwcmltZSB0ZXN0Ci0rCQkgKiBv ZmZlcmluZyBzaW1pbGFyIG9yIGJldHRlciBndWFyYW50ZWVzIDUwIE1SIGlzIGNvbnNpZGVyYWJs eSAKLSsJCSAqIGJldHRlci4KLSsJCSAqLwotKwkJCSYmIEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4 KHAsIDUwLCBjdHgsIDEsIGNiKSkKLSsJCQlicmVhazsKLSsJCWlmICghQk5fYWRkKHAsIHAsIHAx cDIpKQotKwkJCWdvdG8gZXJyOwotKwkJfQotKwotKwlCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKTsK LSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyOgotKwotKwlCTl9DVFhfZW5kKGN0eCk7Ci0rCi0rCXJl dHVybiByZXQ7Ci0rCX0KLSsKLSsvKiBHZW5lcmF0ZSBwYWlyIG9mIHBhcmFtdGVycyBYcCwgWHEg Zm9yIFg5LjMxIHByaW1lIGdlbmVyYXRpb24uCi0rICogTm90ZTogbmJpdHMgcGFyYW10ZXIgaXMg c3VtIG9mIG51bWJlciBvZiBiaXRzIGluIGJvdGguCi0rICovCi0rCi0raW50IEJOX1g5MzFfZ2Vu ZXJhdGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgp Ci0rCXsKLSsJQklHTlVNICp0OwotKwlpbnQgaTsKLSsJLyogTnVtYmVyIG9mIGJpdHMgZm9yIGVh Y2ggcHJpbWUgaXMgb2YgdGhlIGZvcm0KLSsJICogNTEyKzEyOHMgZm9yIHMgPSAwLCAxLCAuLi4K LSsJICovCi0rCWlmICgobmJpdHMgPCAxMDI0KSB8fCAobmJpdHMgJiAweGZmKSkKLSsJCXJldHVy biAwOwotKwluYml0cyA+Pj0gMTsKLSsJLyogVGhlIHJhbmRvbSB2YWx1ZSBYcCBtdXN0IGJlIGJl dHdlZW4gc3FydCgyKSAqIDJeKG5iaXRzLTEpIGFuZAotKwkgKiAyXm5iaXRzIC0gMS4gQnkgc2V0 dGluZyB0aGUgdG9wIHR3byBiaXRzIHdlIGVuc3VyZSB0aGF0IHRoZSBsb3dlcgotKwkgKiBib3Vu ZCBpcyBleGNlZWRlZC4KLSsJICovCi0rCWlmICghQk5fcmFuZChYcCwgbmJpdHMsIDEsIDApKQot KwkJcmV0dXJuIDA7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwl0ID0gQk5fQ1RYX2dldChj dHgpOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQotKwkJewotKwkJaWYgKCFCTl9y YW5kKFhxLCBuYml0cywgMSwgMCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQkvKiBDaGVjayB0aGF0IHxY cCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSAqLwotKwkJQk5fc3ViKHQsIFhwLCBYcSk7Ci0rCQlp ZiAoQk5fbnVtX2JpdHModCkgPiAobmJpdHMgLSAxMDApKQotKwkJCWJyZWFrOwotKwkJfQotKwot KwlCTl9DVFhfZW5kKGN0eCk7Ci0rCi0rCWlmIChpIDwgMTAwMCkKLSsJCXJldHVybiAxOwotKwot KwlyZXR1cm4gMDsKLSsKLSsJfQotKwotKy8qIEdlbmVyYXRlIHByaW1lcyB1c2luZyBYOS4zMSBh bGdvcml0aG0uIE9mIHRoZSB2YWx1ZXMgcCwgcDEsIHAyLCBYcDEKLSsgKiBhbmQgWHAyIG9ubHkg J3AnIG5lZWRzIHRvIGJlIG5vbi1OVUxMLiBJZiBhbnkgb2YgdGhlIG90aGVycyBhcmUgbm90IE5V TEwKLSsgKiB0aGUgcmVsZXZhbnQgcGFyYW1ldGVyIHdpbGwgYmUgc3RvcmVkIGluIGl0LgotKyAq Ci0rICogRHVlIHRvIHRoZSBmYWN0IHRoYXQgfFhwIC0gWHF8ID4gMl4obmJpdHMgLSAxMDApIG11 c3QgYmUgc2F0aXNmaWVkIFhwIGFuZCBYcQotKyAqIGFyZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHBy ZXZpb3VzIGZ1bmN0aW9uIGFuZCBzdXBwbGllZCBhcyBpbnB1dC4KLSsgKi8KLSsKLStpbnQgQk5f WDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIs Ci0rCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAsCi0r CQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKLSsJCQlCTl9HRU5DQiAqY2IpCi0rCXsK LSsJaW50IHJldCA9IDA7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwlpZiAoIVhwMSkKLSsJ CVhwMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsJaWYgKCFYcDIpCi0rCQlYcDIgPSBCTl9DVFhfZ2V0 KGN0eCk7Ci0rCi0rCWlmICghQk5fcmFuZChYcDEsIDEwMSwgMCwgMCkpCi0rCQlnb3RvIGVycm9y OwotKwlpZiAoIUJOX3JhbmQoWHAyLCAxMDEsIDAsIDApKQotKwkJZ290byBlcnJvcjsKLSsJaWYg KCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChwLCBwMSwgcDIsIFhwLCBYcDEsIFhwMiwgZSwgY3R4 LCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJQk5f Q1RYX2VuZChjdHgpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9ibi9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2JuL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vYm4v TWFrZWZpbGUuZmlwcwkyMDA4LTExLTEyIDA5OjE5OjAyLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2JuL01ha2VmaWxlCTIwMTAtMDItMTYgMjI6NTg6MzEu MDAwMDAwMDAwICswMTAwCi1AQCAtMjYsMTMgKzI2LDEzIEBAIExJQlNSQz0JYm5fYWRkLmMgYm5f ZGl2LmMgYm5fZXhwLmMgYm5fbGkKLSAJYm5fcHJpbnQuYyBibl9yYW5kLmMgYm5fc2hpZnQuYyBi bl93b3JkLmMgYm5fYmxpbmQuYyBcCi0gCWJuX2tyb24uYyBibl9zcXJ0LmMgYm5fZ2NkLmMgYm5f cHJpbWUuYyBibl9lcnIuYyBibl9zcXIuYyBibl9hc20uYyBcCi0gCWJuX3JlY3AuYyBibl9tb250 LmMgYm5fbXBpLmMgYm5fZXhwMi5jIGJuX2dmMm0uYyBibl9uaXN0LmMgXAotLQlibl9kZXByLmMg Ym5fY29uc3QuYwotKwlibl9kZXByLmMgYm5fY29uc3QuYyBibl94OTMxcC5jCi0gCi0gTElCT0JK PQlibl9hZGQubyBibl9kaXYubyBibl9leHAubyBibl9saWIubyBibl9jdHgubyBibl9tdWwubyBi bl9tb2QubyBcCi0gCWJuX3ByaW50Lm8gYm5fcmFuZC5vIGJuX3NoaWZ0Lm8gYm5fd29yZC5vIGJu X2JsaW5kLm8gXAotIAlibl9rcm9uLm8gYm5fc3FydC5vIGJuX2djZC5vIGJuX3ByaW1lLm8gYm5f ZXJyLm8gYm5fc3FyLm8gJChCTl9BU00pIFwKLSAJYm5fcmVjcC5vIGJuX21vbnQubyBibl9tcGku byBibl9leHAyLm8gYm5fZ2YybS5vIGJuX25pc3QubyBcCi0tCWJuX2RlcHIubyBibl9jb25zdC5v Ci0rCWJuX2RlcHIubyBibl9jb25zdC5vIGJuX3g5MzFwLm8KLSAKLSBTUkM9ICQoTElCU1JDKQot IAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwt eDg2LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwt eDg2LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwt eDg2LnBsLmZpcHMJMjAwOS0wNC0wNiAxNjoyNTowMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14ODYucGwJMjAxMC0wMi0x NiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC03MjIsMTIgKzcyMiwxNSBAQCBteSAkYmlh cz1pbnQoQFRbMF0pP3NoaWZ0KEBUKTowOwotIH0KLSAmZnVuY3Rpb25fZW5kKCJDYW1lbGxpYV9F a2V5Z2VuIik7Ci0gCi0rJHNldGtleWZ1bmMgPSAiQ2FtZWxsaWFfc2V0X2tleSI7Ci0rJHNldGtl eWZ1bmMgPSAicHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7 Ci0rCi0gaWYgKCRPUEVOU1NMKSB7Ci0gIyBpbnQgQ2FtZWxsaWFfc2V0X2tleSAoCi0gIwkJY29u c3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwKLSAjCQlpbnQgYml0cywKLSAjCQlDQU1FTExJQV9L RVkgKmtleSkKLS0mZnVuY3Rpb25fYmVnaW5fQigiQ2FtZWxsaWFfc2V0X2tleSIpOwotKyZmdW5j dGlvbl9iZWdpbl9CKCRzZXRrZXlmdW5jKTsKLSAJJnB1c2gJKCJlYngiKTsKLSAJJm1vdgkoImVj eCIsJndwYXJhbSgwKSk7CSMgcHVsbCBhcmd1bWVudHMKLSAJJm1vdgkoImVieCIsJndwYXJhbSgx KSk7Ci1AQCAtNzYwLDcgKzc2Myw3IEBAIGlmICgkT1BFTlNTTCkgewotICZzZXRfbGFiZWwoImRv bmUiLDQpOwotIAkmcG9wCSgiZWJ4Iik7Ci0gCSZyZXQJKCk7Ci0tJmZ1bmN0aW9uX2VuZF9CKCJD YW1lbGxpYV9zZXRfa2V5Iik7Ci0rJmZ1bmN0aW9uX2VuZF9CKCRzZXRrZXlmdW5jKTsKLSB9Ci0g Ci0gQFNCT1g9KAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEv Y2FtZWxsaWEuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2NhbWVsbGlhL2NhbWVs bGlhLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5o LmZpcHMJMjAxMC0wMi0xNiAyMjo1ODozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCTIwMTAtMDItMTYgMjI6NTg6MzEu MDAwMDAwMDAwICswMTAwCi1AQCAtODgsNiArODgsMTEgQEAgc3RydWN0IGNhbWVsbGlhX2tleV9z dCAKLSAJfTsKLSB0eXBlZGVmIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgQ0FNRUxMSUFfS0VZOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNv bnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotKwlDQU1FTExJQV9L RVkgKmtleSk7Ci0rI2VuZGlmCi0rCi0gaW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWdu ZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0gCUNBTUVMTElBX0tFWSAqa2V5KTsK LSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJs ay5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvY21sbF9mYmxrLmMK LS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYy5maXBz CTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vY2FtZWxsaWEvY21sbF9mYmxrLmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAw MDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNjggQEAKLSsvKiBjcnlwdG8vY2FtZWxsaWEvY2FtZWxs aWFfbWlzYy5jIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCi0rLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs 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 REFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKi8KLSsgCi0rI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jYW1lbGxpYS5oPgotKyNpbmNsdWRl ICJjbWxsX2xvY2wuaCIKLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLStpbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFy ICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSsJQ0FNRUxMSUFfS0VZICprZXkpCi0rCXsKLSsJ aWYgKEZJUFNfbW9kZSgpKQotKwkJRklQU19CQURfQUJPUlQoQ0FNRUxMSUEpCi0rCXJldHVybiBw cml2YXRlX0NhbWVsbGlhX3NldF9rZXkodXNlcktleSwgYml0cywga2V5KTsKLSsJfQotKyNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNj LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYwot LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jLmZpcHMJ MjAwOC0xMC0yOCAxMzoxMzo1Mi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAw MDAwMCArMDEwMAotQEAgLTUyLDExICs1MiwyMCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2x2Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KLSAjaW5jbHVkZSAiY21sbF9s b2NsLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBjb25zdCBjaGFyIENB TUVMTElBX3ZlcnNpb25bXT0iQ0FNRUxMSUEiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1 bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSsJQ0FNRUxMSUFfS0VZICpr ZXkpCi0rI2Vsc2UKLSBpbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1 c2VyS2V5LCBjb25zdCBpbnQgYml0cywKLSAJQ0FNRUxMSUFfS0VZICprZXkpCi0rI2VuZGlmCi0g CXsKLSAJaWYoIXVzZXJLZXkgfHwgIWtleSkKLSAJCXJldHVybiAtMTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5maXBzCTIwMDgtMTItMjMgMTI6MzM6MDAuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FtZWxsaWEvTWFrZWZp bGUJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yMyw5ICsyMyw5IEBA IEFQUFM9Ci0gCi0gTElCPSQoVE9QKS9saWJjcnlwdG8uYQotIExJQlNSQz1jYW1lbGxpYS5jIGNt bGxfbWlzYy5jIGNtbGxfZWNiLmMgY21sbF9jYmMuYyBjbWxsX29mYi5jIFwKLS0JICAgY21sbF9j ZmIuYyBjbWxsX2N0ci5jIAotKwkgICBjbWxsX2NmYi5jIGNtbGxfY3RyLmMgY21sbF9mYmxrLmMK LSAKLS1MSUJPQko9IGNtbGxfZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8g JChDTUxMX0VOQykKLStMSUJPQko9IGNtbGxfZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNt bGxfY3RyLm8gJChDTUxMX0VOQykgY21sbF9mYmxrLm8KLSAKLSBTUkM9ICQoTElCU1JDKQotIAot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY2FzdC9jYXN0LmguZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYXN0L2Nhc3QuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMJMjAxMC0wMi0xNiAyMjo1ODozMC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYXN0L2Nhc3QuaAkyMDEwLTAy LTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTgzLDcgKzgzLDkgQEAgdHlwZWRlZiBz dHJ1Y3QgY2FzdF9rZXlfc3QKLSAJaW50IHNob3J0X2tleTsJLyogVXNlIHJlZHVjZWQgcm91bmRz IGZvciBzaG9ydCBrZXkgKi8KLSAJfSBDQVNUX0tFWTsKLSAKLS0gCi0rI2lmZGVmIE9QRU5TU0xf RklQUyAKLSt2b2lkIHByaXZhdGVfQ0FTVF9zZXRfa2V5KENBU1RfS0VZICprZXksIGludCBsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotKyNlbmRpZgotIHZvaWQgQ0FTVF9zZXRfa2V5 KENBU1RfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotIHZv aWQgQ0FTVF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hh ciAqb3V0LCBjb25zdCBDQVNUX0tFWSAqa2V5LAotIAkJICAgICAgaW50IGVuYyk7Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jYXN0L2Nfc2tleS5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vY2FzdC9jX3NrZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2Nhc3QvY19za2V5LmMuZmlwcwkyMDAwLTA2LTAzIDE2OjEzOjM1LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Nhc3QvY19za2V5LmMJMjAxMC0w Mi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC01Nyw2ICs1NywxMSBAQAotICAqLwot IAotICNpbmNsdWRlIDxvcGVuc3NsL2Nhc3QuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNl bmRpZgotKwotICNpbmNsdWRlICJjYXN0X2xjbC5oIgotICNpbmNsdWRlICJjYXN0X3MuaCIKLSAK LUBAIC03Miw3ICs3Nyw3IEBACi0gI2RlZmluZSBTNiBDQVNUX1NfdGFibGU2Ci0gI2RlZmluZSBT NyBDQVNUX1NfdGFibGU3Ci0gCi0tdm9pZCBDQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50 IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLStGSVBTX05PTl9GSVBTX1ZDSVBIRVJf SW5pdChDQVNUKQotIAl7Ci0gCUNBU1RfTE9ORyB4WzE2XTsKLSAJQ0FTVF9MT05HIHpbMTZdOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9jcnlwdG8uaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL2NyeXB0by5oLmZpcHMJMjAxMC0wMi0xNiAyMjo1ODozMC4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9jcnlwdG8uaAkyMDEwLTAyLTE2IDIyOjU4OjMx LjAwMDAwMDAwMCArMDEwMAotQEAgLTU0NiwxMiArNTQ2LDY5IEBAIHZvaWQgT3BlblNTTERpZShj b25zdCBjaGFyICpmaWxlLGludCBsaW4KLSB1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBf bG9jKHZvaWQpOwotICNkZWZpbmUgT1BFTlNTTF9pYTMyY2FwICgqKE9QRU5TU0xfaWEzMmNhcF9s b2MoKSkpCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNkZWZpbmUgRklQU19FUlJPUl9JR05P UkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKLSsJCWFsZyAiIHByZXZp b3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7Ci0rCi0rI2RlZmlu ZSBGSVBTX0JBRF9BQk9SVChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0r CQkjYWxnICIgQWxnb3JpdGhtIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUiKTsKLSsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTX1NUUklDVAotKyNkZWZpbmUgRklQU19CQURfQUxHT1JJVEhNKGFsZykgRklQ U19CQURfQUJPUlQoYWxnKQotKyNlbHNlCi0rI2RlZmluZSBGSVBTX0JBRF9BTEdPUklUSE0oYWxn KSBcCi0rCXsgXAotKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19N RVRIT0QpOyBcCi0rCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiQWxnb3JpdGhtPSIsICNhbGcpOyBc Ci0rCXJldHVybiAwOyBcCi0rCX0KLSsjZW5kaWYKLSsKLSsvKiBMb3cgbGV2ZWwgZGlnZXN0IEFQ SSBibG9ja2luZyBtYWNybyAqLwotKwotKyNkZWZpbmUgRklQU19OT05fRklQU19NRF9Jbml0KGFs ZykgXAotKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIFwKLSsJCXsgXAotKwkJaWYgKEZJ UFNfbW9kZSgpKSBcCi0rCQkJRklQU19CQURfQUxHT1JJVEhNKGFsZykgXAotKwkJcmV0dXJuIHBy aXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCi0rCQl9IFwKLSsJaW50IHByaXZhdGVfIyNhbGcjI19J bml0KGFsZyMjX0NUWCAqYykKLSsKLSsvKiBGb3IgY2lwaGVycyB0aGUgQVBJIG9mdGVuIHZhcmll cyBmcm9tIGNpcGhlciB0byBjaXBoZXIgYW5kIGVhY2ggbmVlZHMgdG8KLSsgKiBiZSB0cmVhdGVk IGFzIGEgc3BlY2lhbCBjYXNlLiBWYXJpYWJsZSBrZXkgbGVuZ3RoIGNpcGhlcnMgKEJsb3dmaXNo LCBSQzQsCi0rICogQ0FTVCkgaG93ZXZlciBhcmUgdmVyeSBzaW1pbGFyIGFuZCBjYW4gdXNlIGEg YmxvY2tpbmcgbWFjcm8uCi0rICovCi0rCi0rI2RlZmluZSBGSVBTX05PTl9GSVBTX1ZDSVBIRVJf SW5pdChhbGcpIFwKLSsJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKSBcCi0rCQl7IFwKLSsJCWlmIChGSVBTX21vZGUo KSkgXAotKwkJCUZJUFNfQkFEX0FCT1JUKGFsZykgXAotKwkJcHJpdmF0ZV8jI2FsZyMjX3NldF9r ZXkoa2V5LCBsZW4sIGRhdGEpOyBcCi0rCQl9IFwKLSsJdm9pZCBwcml2YXRlXyMjYWxnIyNfc2V0 X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgXAotKwkJCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqZGF0YSkKLSsKLSsjZWxzZQotKwotKyNkZWZpbmUgRklQU19OT05fRklQU19WQ0lQSEVSX0lu aXQoYWxnKSBcCi0rCXZvaWQgYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwg Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKLSsKLSsjZGVmaW5lIEZJUFNfTk9OX0ZJUFNfTURf SW5pdChhbGcpIFwKLSsJaW50IGFsZyMjX0luaXQoYWxnIyNfQ1RYICpjKSAKLSsKLSsjZW5kaWYg LyogZGVmIE9QRU5TU0xfRklQUyAqLwotKwotIC8qIEJFR0lOIEVSUk9SIENPREVTICovCi0gLyog VGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vy ci5wbC4gQW55IGNoYW5nZXMKLSAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3 cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KLSAgKi8KLSB2b2lkIEVSUl9sb2Fk X0NSWVBUT19zdHJpbmdzKHZvaWQpOwotIAotKyNkZWZpbmUgT1BFTlNTTF9IQVZFX0lOSVQJMQot K3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7Ci0rCi0gLyogRXJyb3IgY29kZXMgZm9y IHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9lcnIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2RoL2RoX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTozNy4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9lcnIuYwkyMDEwLTAyLTE2 IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEVSUl9T VFJJTkdfREFUQSBESF9zdHJfZnVuY3RzW109Ci0ge0VSUl9GVU5DKERIX0ZfQ09NUFVURV9LRVkp LAkiQ09NUFVURV9LRVkifSwKLSB7RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19QUklOVF9GUCksCSJE SHBhcmFtc19wcmludF9mcCJ9LAotIHtFUlJfRlVOQyhESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1T KSwJIkRIX0JVSUxUSU5fR0VOUEFSQU1TIn0sCi0re0VSUl9GVU5DKERIX0ZfREhfQ09NUFVURV9L RVkpLAkiREhfY29tcHV0ZV9rZXkifSwKLSt7RVJSX0ZVTkMoREhfRl9ESF9HRU5FUkFURV9LRVkp LAkiREhfZ2VuZXJhdGVfa2V5In0sCi0ge0VSUl9GVU5DKERIX0ZfREhfTkVXX01FVEhPRCksCSJE SF9uZXdfbWV0aG9kIn0sCi0ge0VSUl9GVU5DKERIX0ZfREhfUEFSQU1fREVDT0RFKSwJIkRIX1BB UkFNX0RFQ09ERSJ9LAotIHtFUlJfRlVOQyhESF9GX0RIX1BSSVZfREVDT0RFKSwJIkRIX1BSSVZf REVDT0RFIn0sCi1AQCAtOTQsNiArOTYsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0 cl9yZWFzb25zW109Ci0ge0VSUl9SRUFTT04oREhfUl9CTl9FUlJPUikgICAgICAgICAgICAgICAs ImJuIGVycm9yIn0sCi0ge0VSUl9SRUFTT04oREhfUl9ERUNPREVfRVJST1IpICAgICAgICAgICAs ImRlY29kZSBlcnJvciJ9LAotIHtFUlJfUkVBU09OKERIX1JfSU5WQUxJRF9QVUJLRVkpICAgICAg ICAgLCJpbnZhbGlkIHB1YmxpYyBrZXkifSwKLSt7RVJSX1JFQVNPTihESF9SX0tFWV9TSVpFX1RP T19TTUFMTCkgICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCi0ge0VSUl9SRUFTT04oREhfUl9L RVlTX05PVF9TRVQpICAgICAgICAgICAsImtleXMgbm90IHNldCJ9LAotIHtFUlJfUkVBU09OKERI X1JfTU9EVUxVU19UT09fTEFSR0UpICAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAotIHtFUlJf UkVBU09OKERIX1JfTk9fUEFSQU1FVEVSU19TRVQpICAgICAgLCJubyBwYXJhbWV0ZXJzIHNldCJ9 LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAwNS0wNC0yNiAyMDo1MzoxNS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9nZW4uYwkyMDEw LTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTY1LDYgKzY1LDEwIEBACi0gI2lu Y2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSA8 b3BlbnNzbC9kaC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGlu dCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LCBpbnQgcHJpbWVfbGVuLCBpbnQgZ2VuZXJh dG9yLCBCTl9HRU5DQiAqY2IpOwotIAotQEAgLTEwNiw2ICsxMTAsMjAgQEAgc3RhdGljIGludCBk aF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAotIAlpbnQgZyxvaz0gLTE7Ci0gCUJOX0NUWCAq Y3R4PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwotKwlpZiAo RklQU19tb2RlKCkgJiYgKHByaW1lX2xlbiA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19C SVRTKSkKLSsJCXsKLSsJCURIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKTsKLSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAljdHg9 Qk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3Rh cnQoY3R4KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2RoL2RoLmguZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaC5oCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vZGgvZGguaC5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzAuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZGgvZGguaAkyMDEwLTAyLTE2IDIy OjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTc3LDYgKzc3LDggQEAKLSAjIGRlZmluZSBPUEVO U1NMX0RIX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5T U0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAjZGVmaW5lIERIX0ZMQUdfQ0FD SEVfTU9OVF9QICAgICAweDAxCi0gI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgw MiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQg dGltZQotQEAgLTI0MSw2ICsyNDMsOCBAQCB2b2lkIEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7 Ci0gI2RlZmluZSBESF9GX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA0Ci0gI2RlZmluZSBESF9G X1BLRVlfREhfREVSSVZFCQkJCSAxMTIKLSAjZGVmaW5lIERIX0ZfUEtFWV9ESF9LRVlHRU4JCQkJ IDExMwotKyNkZWZpbmUgREhfRl9ESF9DT01QVVRFX0tFWQkJCQkgMTE0Ci0rI2RlZmluZSBESF9G X0RIX0dFTkVSQVRFX0tFWQkJCSAxMTUKLSAKLSAvKiBSZWFzb24gY29kZXMuICovCi0gI2RlZmlu ZSBESF9SX0JBRF9HRU5FUkFUT1IJCQkJIDEwMQotQEAgLTI1Myw2ICsyNTcsNyBAQCB2b2lkIEVS Ul9sb2FkX0RIX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBESF9SX05PX1BBUkFNRVRFUlNfU0VU CQkJCSAxMDcKLSAjZGVmaW5lIERIX1JfTk9fUFJJVkFURV9WQUxVRQkJCQkgMTAwCi0gI2RlZmlu ZSBESF9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKLSsjZGVmaW5lIERIX1JfS0VZ X1NJWkVfVE9PX1NNQUxMCQkJCSAxMTAKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gfQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2RoL2RoX2tleS5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyMy4wMDAwMDAwMDAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kaC9kaF9rZXkuYwkyMDEwLTAyLTE2 IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTYxLDYgKzYxLDkgQEAKLSAjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3Bl bnNzbC9kaC5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKLSBzdGF0 aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJf a2V5LCBESCAqZGgpOwotQEAgLTEwNyw2ICsxMTAsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9r ZXkoREggKmRoKQotIAlCTl9NT05UX0NUWCAqbW9udD1OVUxMOwotIAlCSUdOVU0gKnB1Yl9rZXk9 TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBT X21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RV TFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJ WkVfVE9PX1NNQUxMKTsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotKwotIAljdHggPSBC Tl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCi1AQCAtMTg0LDYg KzE5NSwxMyBAQCBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtlCi0gCQlE SGVycihESF9GX0NPTVBVVEVfS0VZLERIX1JfTU9EVUxVU19UT09fTEFSR0UpOwotIAkJZ290byBl cnI7Ci0gCQl9Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYgKEJO X251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJ CXsKLSsJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsK LSsJCWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotIAotIAljdHggPSBCTl9DVFhfbmV3KCk7Ci0g CWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7Ci1AQCAtMjUxLDYgKzI2OSw5IEBAIHN0YXRpYyBp bnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEIKLSAKLSBzdGF0aWMgaW50IGRoX2luaXQo REggKmRoKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7Ci0rI2VuZGlmCi0gCWRoLT5mbGFncyB8PSBESF9GTEFHX0NBQ0hFX01PTlRfUDsKLSAJcmV0 dXJuKDEpOwotIAl9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kc2EvZHNh X2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZHNhL2RzYV9nZW4uYwotLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDA4LTEyLTI2 IDE4OjE3OjIxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2RzYS9kc2FfZ2VuLmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC03 Nyw4ICs3NywxMiBAQAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlIDxvcGVuc3Ns L2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNh Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5o PgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0gI2luY2x1ZGUgImRzYV9sb2NsLmgiCi0gCi0gaW50IERTQV9nZW5lcmF0ZV9wYXJhbWV0 ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKLUBAIC0xMjYsNiArMTMwLDIxIEBAIGludCBkc2Ff YnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAJ dW5zaWduZWQgaW50IGg9MjsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfQlVJTFRJ Tl9QQVJBTUdFTiwKLSsJCSAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAg Z290byBlcnI7Ci0rCSAgICB9Ci0rCi0rCWlmIChGSVBTX21vZGUoKSAmJiAoYml0cyA8IE9QRU5T U0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNB X0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQlnb3RvIGVy cjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKHFzaXplICE9IFNIQV9ESUdFU1RfTEVOR1RIICYm IHFzaXplICE9IFNIQTIyNF9ESUdFU1RfTEVOR1RIICYmCi0gCSAgICBxc2l6ZSAhPSBTSEEyNTZf RElHRVNUX0xFTkdUSCkKLSAJCS8qIGludmFsaWQgcSBzaXplICovCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9kc2EvZHNhLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kc2EvZHNhLmgu ZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2RzYS9kc2EuaAkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCAr MDEwMAotQEAgLTg4LDYgKzg4LDggQEAKLSAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxV U19CSVRTCTEwMDAwCi0gI2VuZGlmCi0gCi0rI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMgMTAyNAotKwotICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEK LSAjZGVmaW5lIERTQV9GTEFHX05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0 aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBEU0EKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1l Ci1AQCAtOTcsNiArOTksMjEgQEAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKiBiZSB1c2VkIGZvciBhbGwgZXhwb25lbnRzLgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotIAotKy8qIElmIHRoaXMgZmxhZyBp cyBzZXQgdGhlIERTQSBtZXRob2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCi0r ICogaW4gRklQUyBtb2RlLiBUaGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRo b2QuIElmIGFuCi0rICogYXBwbGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRo b2RzIGl0IGlzIGl0cyByZXBvc2liaWxpdHkKLSsgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBj b21wbGlhbnQuCi0rICovCi0rCi0rI2RlZmluZSBEU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQw MAotKwotKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlz YWJsZWQgaW4gRklQUyBtb2RlIGFyZQotKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBs aWNhdGlvbnMgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCi0rICogdXNhZ2UgaXMg Y29tcGxpYW50LgotKyAqLwotKwotKyNkZWZpbmUgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkw eDA0MDAKLSsKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi0gZXh0ZXJuICJDIiB7Ci0gI2VuZGlmCi1A QCAtMjcwLDggKzI4NywxMSBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOwotICNk ZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UCQkJCSAxMDQKLSAjZGVmaW5lIERTQV9GX0RTQVBBUkFN U19QUklOVAkJCQkgMTAwCi0gI2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlAJCQkgMTAx Ci0rI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTI0Ci0rI2RlZmluZSBEU0Ff Rl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMjMKLSAjZGVmaW5lIERTQV9GX0RTQV9ET19TSUdO CQkJCSAxMTIKLSAjZGVmaW5lIERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDExMwotKyNkZWZpbmUg RFNBX0ZfRFNBX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTI1Ci0gI2RlZmluZSBEU0FfRl9EU0Ff TkVXX01FVEhPRAkJCQkgMTAzCi0gI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAx MTkKLSAjZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUAkJCQkgMTA1Ci1AQCAtMjk2LDkgKzMxNiwx MiBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgRFNBX1JfREFU QV9UT09fTEFSR0VfRk9SX0tFWV9TSVpFCQkgMTAwCi0gI2RlZmluZSBEU0FfUl9ERUNPREVfRVJS T1IJCQkJIDEwNAotICNkZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKLSsj ZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTAkJCSAxMTAKLSAjZGVmaW5lIERTQV9SX01J U1NJTkdfUEFSQU1FVEVSUwkJCSAxMDEKLSAjZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdF CQkJCSAxMDMKLSsjZGVmaW5lIERTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTExCi0gI2RlZmlu ZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBEU0FfUl9PUEVSQVRJ T05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxMTIKLSAjZGVmaW5lIERTQV9SX1BBUkFNRVRF Ul9FTkNPRElOR19FUlJPUgkJCSAxMDUKLSAKLSAjaWZkZWYgIF9fY3BsdXNwbHVzCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vZHNhL2RzYV9rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI1LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2RzYS9kc2Ffa2V5LmMJMjAxMC0w Mi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02Myw5ICs2Myw1NSBAQAotICNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0gI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotIAotIHN0YXRpYyBpbnQg ZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r Ci0rc3RhdGljIGludCBmaXBzX2RzYV9wYWlyd2lzZV9mYWlsID0gMDsKLSsKLSt2b2lkIEZJUFNf Y29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpCi0rCXsKLSsJZmlwc19kc2FfcGFpcndpc2VfZmFpbCA9 IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19jaGVja19kc2EoRFNBICpkc2EpCi0rCXsKLSsJRVZQX1BL RVkgKnBrOwotKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRh IjsKLSsJaW50IHJldCA9IDA7Ci0rCi0rICAgIAlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBO VUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVWUF9QS0VZX3NldDFfRFNBKHBrLCBkc2EpOwotKwot KwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJCQkJCU5VTEws IDAsIEVWUF9zaGExKCksIDAsIE5VTEwpKQotKwkJZ290byBlcnI7Ci0rCi0rCXJldCA9IDE7Ci0r Ci0rZXJyOgotKwlpZiAocmV0ID09IDApCi0rCQl7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9mYWls KCk7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSxGSVBTX1JfUEFJUldJU0VfVEVT VF9GQUlMRUQpOwotKwkJfQotKwotKwlpZiAocGspCi0rCQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsK LSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotKwotIGludCBEU0FfZ2VuZXJhdGVfa2V5KERT QSAqZHNhKQotIAl7Ci0gCWlmKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikKLUBAIC03OSw2ICsxMjUs MTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCi0gCUJOX0NUWCAq Y3R4PU5VTEw7Ci0gCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOwotIAotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2Et PnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURTQWVy cihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0r CQlnb3RvIGVycjsKLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9 PSBOVUxMKSBnb3RvIGVycjsKLSAKLSAJaWYgKGRzYS0+cHJpdl9rZXkgPT0gTlVMTCkKLUBAIC0x MTcsNiArMTcxLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQot IAotIAlkc2EtPnByaXZfa2V5PXByaXZfa2V5OwotIAlkc2EtPnB1Yl9rZXk9cHViX2tleTsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmIChmaXBz X2RzYV9wYWlyd2lzZV9mYWlsKQotKwkJCUJOX2FkZF93b3JkKGRzYS0+cHViX2tleSwgMSk7Ci0r CQlpZighZmlwc19jaGVja19kc2EoZHNhKSkKLSsJCSAgICBnb3RvIGVycjsKLSsJCX0KLSsjZW5k aWYKLSAJb2s9MTsKLSAKLSBlcnI6Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0 by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2RzYS9kc2Ff b3NzbC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlw cwkyMDA3LTAzLTI4IDAyOjE1OjI2LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi1AQCAtNjUsNiArNjUsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotICNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAK LSBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwg aW50IGRsZW4sIERTQSAqZHNhKTsKLSBzdGF0aWMgaW50IGRzYV9zaWduX3NldHVwKERTQSAqZHNh LCBCTl9DVFggKmN0eF9pbiwgQklHTlVNICoqa2ludnAsIEJJR05VTSAqKnJwKTsKLUBAIC04Miw3 ICs4NSw3IEBAIE5VTEwsIC8qIGRzYV9tb2RfZXhwLCAqLwotIE5VTEwsIC8qIGRzYV9ibl9tb2Rf ZXhwLCAqLwotIGRzYV9pbml0LAotIGRzYV9maW5pc2gsCi0tMCwKLStEU0FfRkxBR19GSVBTX01F VEhPRCwKLSBOVUxMLAotIE5VTEwsCi0gTlVMTAotQEAgLTEzNyw2ICsxNDAsMjAgQEAgc3RhdGlj IERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbgotIAlpbnQgcmVhc29uPUVSUl9SX0JO X0xJQjsKLSAJRFNBX1NJRyAqcmV0PU5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0Zf RFNBX0RPX1NJR04sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiBO VUxMOwotKwkgICAgfQotKwotKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRzYS0+ cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJRFNBZXJy KERTQV9GX0RTQV9ET19TSUdOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJu IE5VTEw7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCUJOX2luaXQoJm0pOwotIAlCTl9pbml0KCZ4cik7 Ci0gCi1AQCAtMzEyLDYgKzMyOSwyMCBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3Qg dW5zaWduZWQgCi0gCQlyZXR1cm4gLTE7Ci0gCQl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBT X0ZfRFNBX0RPX1ZFUklGWSxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0 dXJuIC0xOwotKwkgICAgfQotKwotKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRz YS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQotKwkJewotKwkJRFNB ZXJyKERTQV9GX0RTQV9ET19WRVJJRlksIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rCQly ZXR1cm4gLTE7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWkgPSBCTl9udW1fYml0cyhkc2EtPnEpOwot IAkvKiBmaXBzIDE4Ni0zIGFsbG93cyBvbmx5IGRpZmZlcmVudCBzaXplcyBmb3IgcSAqLwotIAlp ZiAoaSAhPSAxNjAgJiYgaSAhPSAyMjQgJiYgaSAhPSAyNTYpCi1AQCAtNDAzLDYgKzQzNCw5IEBA IHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZCAKLSAKLSBzdGF0aWMgaW50 IGRzYV9pbml0KERTQSAqZHNhKQotIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJZHNhLT5mbGFnc3w9RFNBX0ZMQUdfQ0FDSEVfTU9O VF9QOwotIAlyZXR1cm4oMSk7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZXJyL2Vycl9hbGwuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Vyci9lcnJf YWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9lcnIvZXJyX2FsbC5jLmZpcHMJ MjAwOS0wOC0wOSAxNjo1ODowNS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9lcnIvZXJyX2FsbC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICsw MTAwCi1AQCAtOTYsNiArOTYsOSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL29jc3AuaD4KLSAjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC90cy5oPgotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gI2lmbmRl ZiBPUEVOU1NMX05PX0NNUwotICNpbmNsdWRlIDxvcGVuc3NsL2Ntcy5oPgotICNlbmRpZgotQEAg LTE0OSw2ICsxNTIsOSBAQCB2b2lkIEVSUl9sb2FkX2NyeXB0b19zdHJpbmdzKHZvaWQpCi0gI2Vu ZGlmCi0gCUVSUl9sb2FkX09DU1Bfc3RyaW5ncygpOwotIAlFUlJfbG9hZF9VSV9zdHJpbmdzKCk7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlFUlJfbG9hZF9GSVBTX3N0cmluZ3MoKTsKLSsjZW5k aWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCi0gCUVSUl9sb2FkX0NNU19zdHJpbmdzKCk7Ci0g I2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZGlnZXN0LmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZGlnZXN0LmMKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDA5LTEyLTA5IDE2OjAyOjE0 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9kaWdl c3QuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTExNiw2ICsxMTYs NyBAQAotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAjaW5jbHVkZSA8b3BlbnNzbC9lbmdp bmUuaD4KLSAjZW5kaWYKLSsjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSB2b2lkIEVWUF9NRF9D VFhfaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gCXsKLUBAIC0xMzgsOSArMTM5LDUwIEBAIGludCBF VlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMKLSAJcmV0dXJuIEVWUF9EaWdlc3RJ bml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r Ci0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVt cHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9y ZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NUWCAq Y3R4KQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsgcmV0dXJuIDA7fQot KwotK3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0 YSxzaXplX3QgY291bnQpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7 IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsdW5z aWduZWQgY2hhciAqbWQpCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsg cmV0dXJuIDA7fQotKwotK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0KLSsJewotKwkwLAot KwkwLAotKwkwLAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFkX3VwZGF0ZSwKLSsJYmFkX2ZpbmFs LAotKwlOVUxMLAotKwlOVUxMLAotKwlOVUxMLAotKwkwLAotKwl7MCwwLDAsMH0sCi0rCX07Ci0r Ci0rI2VuZGlmCi0rCi0gaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgY29u c3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCi0gCXsKLSAJRVZQX01EX0NUWF9jbGVhcl9m bGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0VW UF9ESUdFU1RJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQljdHgtPmRp Z2VzdCA9ICZiYWRfbWQ7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVmIE9Q RU5TU0xfTk9fRU5HSU5FCi0gCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBj YW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKLSAJICogc28gdGhpcyBjb250ZXh0IG1h eSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCi1AQCAtMTk2 LDYgKzIzOCwxOCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCi0g I2VuZGlmCi0gCWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQotIAkJewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJCWlmIChGSVBTX21vZGUoKSkKLSsJCQl7Ci0rCQkJaWYgKCEodHlwZS0+ZmxhZ3Mg JiBFVlBfTURfRkxBR19GSVBTKSAKLSsJCQkgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJCQkJewotKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJR0VT VElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSsJCQkJY3R4LT5kaWdlc3QgPSAm YmFkX21kOwotKwkJCQlyZXR1cm4gMDsKLSsJCQkJfQotKwkJCX0KLSsjZW5kaWYKLSAJCWlmIChj dHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpCi0gCQkJT1BFTlNTTF9mcmVlKGN0 eC0+bWRfZGF0YSk7Ci0gCQljdHgtPmRpZ2VzdD10eXBlOwotQEAgLTIyOSw2ICsyODMsOSBAQCBz a2lwX3RvX2luaXQ6Ci0gCi0gaW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBj b25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eC0+dXBkYXRl KGN0eCxkYXRhLGNvdW50KTsKLSAJfQotIAotQEAgLTI0NSw2ICszMDIsOSBAQCBpbnQgRVZQX0Rp Z2VzdEZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zCi0gaW50IEVWUF9EaWdlc3RGaW5hbF9leChF VlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCi0g CXsKLSAJaW50IHJldDsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKLSsjZW5kaWYKLSAKLSAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUg PD0gRVZQX01BWF9NRF9TSVpFKTsKLSAJcmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZV9hZXMuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMJMjAwNC0wMS0yOCAyMDowNTozMy4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZV9hZXMuYwkyMDEwLTAy LTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTY5LDMyICs2OSwyOSBAQCB0eXBlZGVm IHN0cnVjdAotIAotIElNUExFTUVOVF9CTE9DS19DSVBIRVIoYWVzXzEyOCwga3MsIEFFUywgRVZQ X0FFU19LRVksCi0gCQkgICAgICAgTklEX2Flc18xMjgsIDE2LCAxNiwgMTYsIDEyOCwKLS0JCSAg ICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAotLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2Fz bjFfaXYsCi0tCQkgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKLS0JCSAgICAgICBOVUxM KQotKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNO MSwKLSsJCSAgICAgICBhZXNfaW5pdF9rZXksCi0rCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwg TlVMTCkKLSBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGFlc18xOTIsIGtzLCBBRVMsIEVWUF9BRVNf S0VZLAotIAkJICAgICAgIE5JRF9hZXNfMTkyLCAxNiwgMjQsIDE2LCAxMjgsCi0tCQkgICAgICAg MCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKLS0JCSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2 LAotLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0tCQkgICAgICAgTlVMTCkKLSsJ CSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0r CQkgICAgICAgYWVzX2luaXRfa2V5LAotKwkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwp Ci0gSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihhZXNfMjU2LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwK LSAJCSAgICAgICBOSURfYWVzXzI1NiwgMTYsIDMyLCAxNiwgMTI4LAotLQkJICAgICAgIDAsIGFl c19pbml0X2tleSwgTlVMTCwgCi0tCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0J CSAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotLQkJICAgICAgIE5VTEwpCi0tCi0tI2Rl ZmluZSBJTVBMRU1FTlRfQUVTX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGFlcyxB RVMsRVZQX0FFU19LRVksa3Msa3NpemUsY2JpdHMsMTYpCi0tCi0tSU1QTEVNRU5UX0FFU19DRkJS KDEyOCwxKQotLUlNUExFTUVOVF9BRVNfQ0ZCUigxOTIsMSkKLS1JTVBMRU1FTlRfQUVTX0NGQlIo MjU2LDEpCi0tCi0tSU1QTEVNRU5UX0FFU19DRkJSKDEyOCw4KQotLUlNUExFTUVOVF9BRVNfQ0ZC UigxOTIsOCkKLS1JTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDgpCi0rCQkgICAgICAgRVZQX0NJUEhf RkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICAgIGFlc19pbml0 X2tleSwKLSsJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotKwotKyNkZWZpbmUgSU1Q TEVNRU5UX0FFU19DRkJSKGtzaXplLGNiaXRzLGZsYWdzKQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVT LEVWUF9BRVNfS0VZLGtzLGtzaXplLGNiaXRzLDE2LGZsYWdzKQotKwotK0lNUExFTUVOVF9BRVNf Q0ZCUigxMjgsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rSU1QTEVNRU5UX0FFU19DRkJSKDE5Miwx LEVWUF9DSVBIX0ZMQUdfRklQUykKLStJTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDEsRVZQX0NJUEhf RkxBR19GSVBTKQotKwotK0lNUExFTUVOVF9BRVNfQ0ZCUigxMjgsOCxFVlBfQ0lQSF9GTEFHX0ZJ UFMpCi0rSU1QTEVNRU5UX0FFU19DRkJSKDE5Miw4LEVWUF9DSVBIX0ZMQUdfRklQUykKLStJTVBM RU1FTlRfQUVTX0NGQlIoMjU2LDgsRVZQX0NJUEhfRkxBR19GSVBTKQotIAotIHN0YXRpYyBpbnQg YWVzX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwKLSAJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYy5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jLmZpcHMJMjAwNi0wOC0zMSAyMjo1NjoyMC4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZV9jYW1lbGxpYS5j CTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtOTMsNyArOTMsNyBAQCBJ TVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGNhbWVsbGlhXzI1Niwga3MsCi0gCUVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCi0gCU5VTEwpCi0gCi0tI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUihr c2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NBTUVMTElB X0tFWSxrcyxrc2l6ZSxjYml0cywxNikKLSsjZGVmaW5lIElNUExFTUVOVF9DQU1FTExJQV9DRkJS KGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxFVlBfQ0FNRUxM SUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2LDApCi0gCi0gSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIo MTI4LDEpCi0gSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoMTkyLDEpCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9ldnAvZV9kZXMzLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAv ZV9kZXMzLmMuZmlwcwkyMDA4LTEyLTI5IDEzOjM1OjQ3LjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDEwLTAyLTE2IDIyOjU4OjMx LjAwMDAwMDAwMCArMDEwMAotQEAgLTIwNiw5ICsyMDYsOSBAQCBzdGF0aWMgaW50IGRlc19lZGUz X2NmYjhfY2lwaGVyKEVWUF9DSVBICi0gICAgIH0KLSAKLSBCTE9DS19DSVBIRVJfZGVmcyhkZXNf ZWRlLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKLS0JCQlFVlBfQ0lQ SF9SQU5EX0tFWSwgZGVzX2VkZV9pbml0X2tleSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhFUl9zZXRf YXNuMV9pdiwKLS0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9L RVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJCWRl c19lZGVfaW5pdF9rZXksCi0rCQkJTlVMTCwgTlVMTCwgTlVMTCwKLSAJCQlkZXMzX2N0cmwpCi0g Ci0gI2RlZmluZSBkZXNfZWRlM19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKLUBA IC0yMTcsMjEgKzIxNywyMSBAQCBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tF WSwgCi0gI2RlZmluZSBkZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgotIAot IEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4 LCAyNCwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBO VUxMLCAKLS0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJCUVWUF9DSVBIRVJfZ2V0X2Fz bjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhf RkxBR19ERUZBVUxUX0FTTjEsCi0rCQkJZGVzX2VkZTNfaW5pdF9rZXksCi0rCQkJTlVMTCwgTlVM TCwgTlVMTCwKLSAJCQlkZXMzX2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2Vk ZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUzLDI0LDgsMSwKLS0JCSAgICAgRVZQX0NJUEhfUkFO RF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2Fz bjFfaXYsCi0tCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5E X0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkg ICAgIGRlc19lZGUzX2luaXRfa2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAg ICBkZXMzX2N0cmwpCi0gCi0gQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9L RVksTklEX2Rlc19lZGUzLDI0LDgsOCwKLS0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19l ZGUzX2luaXRfa2V5LE5VTEwsCi0tCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkg ICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCi0rCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQ SF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgIGRlc19lZGUz X2luaXRfa2V5LAotKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAotIAkJICAgICBkZXMzX2N0cmwp Ci0gCi0gc3RhdGljIGludCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL2V2cC9lX251bGwuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9lX251 bGwuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIw MDgtMTAtMzEgMjA6NDg6MjQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vZXZwL2VfbnVsbC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAw Ci1AQCAtNjksNyArNjksNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBuX2NpcGhlcj0KLSAJ ewotIAlOSURfdW5kZWYsCi0gCTEsMCwwLAotLQkwLAotKwlFVlBfQ0lQSF9GTEFHX0ZJUFMsCi0g CW51bGxfaW5pdF9rZXksCi0gCW51bGxfY2lwaGVyLAotIAlOVUxMLAotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2VfcmM0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9ldnAvZV9yYzQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9l X3JjNC5jLmZpcHMJMjAwOC0xMC0zMSAyMDo0ODoyNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZV9yYzQuYwkyMDEwLTAyLTE2IDIzOjQ3OjA0LjAw MDAwMDAwMCArMDEwMAotQEAgLTY0LDYgKzY0LDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmM0 Lmg+Ci0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gLyogRklYTUU6IHN1cmVseSB0aGlzIGlz IGF2YWlsYWJsZSBlbHNld2hlcmU/ICovCi0gI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9ldnBfZW5jLmMKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODowMC4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZXZwX2VuYy5j CTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNjgsOCArNjgsNTMgQEAK LSAKLSBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW109IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhU OwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBp cyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdv cml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3Rh dGljIGludCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFy ICprZXksCi0rCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsIGludCBlbmMpCi0rCXsgRklQ U19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGlu dCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwK LSsJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0rCXsgRklQ U19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBkYXRlIik7IHJldHVybiAwO30KLSsKLSsvKiBOQjog bm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KLSsK LStzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUg KnR5cCkKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4g MDt9Ci0rc3RhdGljIGludCBiYWRfZ2V0X2FzbjEoRVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9U WVBFICp0eXApCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0 dXJuIDA7fQotK3N0YXRpYyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5 cGUsIGludCBhcmcsIHZvaWQgKnB0cikKLSsJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBj dHJsIik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVy ID0KLSsJewotKwkwLAotKwkwLAotKwkwLAotKwkwLAotKwkwLAotKwliYWRfaW5pdCwKLSsJYmFk X2RvX2NpcGhlciwKLSsJTlVMTCwKLSsJMCwKLSsJYmFkX3NldF9hc24xLAotKwliYWRfZ2V0X2Fz bjEsCi0rCWJhZF9jdHJsLAotKwlOVUxMCi0rCX07Ci0rCi0rI2VuZGlmCi0rCi0gdm9pZCBFVlBf Q0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RYICpjdHgpCi0gCXsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJbWVtc2V0KGN0eCww LHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwotIAkvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLwotIAl9 Ci1AQCAtMTAxLDYgKzE0NiwxNCBAQCBpbnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9D VFggKmN0Ci0gCQkJZW5jID0gMTsKLSAJCWN0eC0+ZW5jcnlwdCA9IGVuYzsKLSAJCX0KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlG SVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsJCXJldHVybiAwOwotKwkJfQot KyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJLyogV2hldGhlciBpdCdzIG5p Y2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cwotIAkg KiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9p ZCByZWxlYXNpbmcKLUBAIC0yMTksNiArMjcyLDIyIEBAIHNraXBfdG9faW5pdDoKLSAJCX0KLSAJ fQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJLyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1 cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KLSsJICogU28gb25seSBj aGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KLSsJICovCi0rCWlmIChr ZXkgJiYgRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBF VlBfQ0lQSF9GTEFHX0ZJUFMpCi0rCQkJJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05P Tl9GSVBTX0FMTE9XKSkKLSsJCQl7Ci0rCQkJRVZQZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VY LCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rCQkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhl cjsKLSsJCQlyZXR1cm4gMDsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmKGtleSB8fCAo Y3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsKLSAJCWlm KCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2LGVuYykpIHJldHVybiAwOwotIAl9Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZXZwX2Vyci5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2V2cF9lcnIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcwkyMDA5LTEyLTE3IDE2OjI4OjQ0LjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9ldnBfZXJyLmMJMjAx MC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xNTQsNiArMTU0LDcgQEAgc3Rh dGljIEVSUl9TVFJJTkdfREFUQSBFVlBfc3RyX3JlYXNvbnNbXQotIHtFUlJfUkVBU09OKEVWUF9S X0RFQ09ERV9FUlJPUikgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihF VlBfUl9ESUZGRVJFTlRfS0VZX1RZUEVTKSAgICwiZGlmZmVyZW50IGtleSB0eXBlcyJ9LAotIHtF UlJfUkVBU09OKEVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTKSAgLCJkaWZmZXJlbnQgcGFyYW1l dGVycyJ9LAotK3tFUlJfUkVBU09OKEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKSAgICAgLCJkaXNh YmxlZCBmb3IgZmlwcyJ9LAotIHtFUlJfUkVBU09OKEVWUF9SX0VOQ09ERV9FUlJPUikgICAgICAg ICAgLCJlbmNvZGUgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9FVlBfUEJFX0NJUEhFUklO SVRfRVJST1IpLCJldnAgcGJlIGNpcGhlcmluaXQgZXJyb3IifSwKLSB7RVJSX1JFQVNPTihFVlBf Ul9FWFBFQ1RJTkdfQU5fUlNBX0tFWSkgICwiZXhwZWN0aW5nIGFuIHJzYSBrZXkifSwKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2V2cC9ldnAuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2V2cC9ldnAuaC5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzAuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2V2cC5oCTIwMTAtMDItMTYgMjI6NTg6MzEu MDAwMDAwMDAwICswMTAwCi1AQCAtNzUsNiArNzUsMTAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9i aW8uaD4KLSAjZW5kaWYKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotKwotIC8qCi0gI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkx NgotICNkZWZpbmUgRVZQX1JDNF9LRVlfU0laRQkJMTYKLUBAIC0xOTcsNiArMjAxLDggQEAgdHlw ZWRlZiBpbnQgZXZwX3ZlcmlmeV9tZXRob2QoaW50IHR5cGUsYwotIAotICNkZWZpbmUgRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFCTB4MDAwNAotIAotKyNkZWZpbmUgRVZQX01EX0ZM QUdfRklQUwkweDA0MDAgLyogTm90ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAq LwotKwotIC8qIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIgZmxhZ3MuLi4gKi8KLSAKLSAjZGVm aW5lIEVWUF9NRF9GTEFHX0RJR0FMR0lEX01BU0sJCTB4MDAxOAotQEAgLTI2OSwxMCArMjc1LDYg QEAgc3RydWN0IGVudl9tZF9jdHhfc3QKLSAJCQkJCQkqIGNsZWFuZWQgKi8KLSAjZGVmaW5lIEVW UF9NRF9DVFhfRkxBR19SRVVTRQkJMHgwMDA0IC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRh Ci0gCQkJCQkJKiBpbiBFVlBfTURfQ1RYX2NsZWFudXAgKi8KLS0vKiBGSVBTIGFuZCBwYWQgb3B0 aW9ucyBhcmUgaWdub3JlZCBpbiAxLjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUKLS0gKiBzbyB3 ZSBkb24ndCBhY2NpZGVudGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMu Ci0tICovCi0tCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHgwMDA4 CS8qIEFsbG93IHVzZSBvZiBub24gRklQUyBkaWdlc3QKLSAJCQkJCQkgKiBpbiBGSVBTIG1vZGUg Ki8KLSAKLUBAIC0yODQsNiArMjg2LDEwIEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gI2RlZmlu ZSBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxCTB4MDAJLyogUEtDUyMxIHYxLjUgbW9kZSAqLwot ICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxCTB4MTAJLyogWDkuMzEgbW9kZSAqLwot ICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MJCTB4MjAJLyogUFNTIG1vZGUgKi8KLSsj ZGVmaW5lIE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCkgXAotKwkJKChjdHgtPmZsYWdz Pj4xNikgJjB4RkZGRikgLyogc2VlZCBsZW5ndGggKi8KLSsjZGVmaW5lIEVWUF9NRF9DVFhfRkxB R19QU1NfTURMRU4JMHhGRkZGCS8qIHNhbHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCi0rI2RlZmlu ZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMJMHhGRkZFCS8qIHNhbHQgbWF4IG9yIGF1dG8gcmVj b3ZlcmVkICovCi0gCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVAkJMHgwMTAwIC8q IERvbid0IGluaXRpYWxpemUgbWRfZGF0YSAqLwotIAotQEAgLTMzMCw2ICszMzYsMTQgQEAgc3Ry dWN0IGV2cF9jaXBoZXJfc3QKLSAjZGVmaW5lIAlFVlBfQ0lQSF9OT19QQURESU5HCQkweDEwMAot IC8qIGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLwotICNkZWZpbmUgCUVW UF9DSVBIX1JBTkRfS0VZCQkweDIwMAotKy8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBG SVBTIG1vZGUgKi8KLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0ZJUFMJCTB4NDAwCi0rLyogQWxs b3cgbm9uIEZJUFMgY2lwaGVyIGluIEZJUFMgbW9kZSAqLwotKyNkZWZpbmUJCUVWUF9DSVBIX0ZM QUdfTk9OX0ZJUFNfQUxMT1cJMHg4MDAKLSsvKiBBbGxvdyB1c2UgZGVmYXVsdCBBU04xIGdldC9z ZXQgaXYgKi8KLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMQkweDEwMDAKLSsv KiBCdWZmZXIgbGVuZ3RoIGluIGJpdHMgbm90IGJ5dGVzOiBDRkIxIG1vZGUgb25seSAqLwotKyNk ZWZpbmUJCUVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMJMHgyMDAwCi0gCi0gLyogY3RybCgpIHZh bHVlcyAqLwotIAotQEAgLTUwNyw2ICs1MjEsMTAgQEAgaW50CUVWUF9CeXRlc1RvS2V5KGNvbnN0 IEVWUF9DSVBIRVIgKnR5cAotIAkJY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSwKLSAJCWludCBkYXRhbCwgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFy ICprZXksdW5zaWduZWQgY2hhciAqaXYpOwotIAotK3ZvaWQJRVZQX0NJUEhFUl9DVFhfc2V0X2Zs YWdzKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBmbGFncyk7Ci0rdm9pZAlFVlBfQ0lQSEVSX0NU WF9jbGVhcl9mbGFncyhFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3MpOwotK2ludCAJRVZQ X0NJUEhFUl9DVFhfdGVzdF9mbGFncyhjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4LGludCBmbGFn cyk7Ci0rCi0gaW50CUVWUF9FbmNyeXB0SW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LGNvbnN0IEVW UF9DSVBIRVIgKmNpcGhlciwKLSAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgdW5z aWduZWQgY2hhciAqaXYpOwotIGludAlFVlBfRW5jcnlwdEluaXRfZXgoRVZQX0NJUEhFUl9DVFgg KmN0eCxjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsIEVOR0lORSAqaW1wbCwKLUBAIC0xMjI1LDYg KzEyNDMsNyBAQCB2b2lkIEVSUl9sb2FkX0VWUF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgRVZQ X1JfREVDT0RFX0VSUk9SCQkJCSAxMTQKLSAjZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQ RVMJCQkgMTAxCi0gI2RlZmluZSBFVlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVSUwkJCSAxNTMKLSsj ZGVmaW5lIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTCQkJCSAxNjAKLSAjZGVmaW5lIEVWUF9SX0VO Q09ERV9FUlJPUgkJCQkgMTE1Ci0gI2RlZmluZSBFVlBfUl9FVlBfUEJFX0NJUEhFUklOSVRfRVJS T1IJCQkgMTE5Ci0gI2RlZmluZSBFVlBfUl9FWFBFQ1RJTkdfQU5fUlNBX0tFWQkJCSAxMjcKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZXZwX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzCTIwMDktMTItMjUgMTU6MTI6MjQuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL2V2cF9saWIuYwky MDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTY3LDYgKzY3LDggQEAgaW50 IEVWUF9DSVBIRVJfcGFyYW1fdG9fYXNuMShFVlBfQ0lQSEVSXwotIAotIAlpZiAoYy0+Y2lwaGVy LT5zZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCi0gCQlyZXQ9Yy0+Y2lwaGVyLT5zZXRfYXNu MV9wYXJhbWV0ZXJzKGMsdHlwZSk7Ci0rCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBf Q0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKLSsJCXJldD1FVlBfQ0lQSEVSX3NldF9hc24xX2l2KGMs IHR5cGUpOwotIAllbHNlCi0gCQlyZXQ9LTE7Ci0gCXJldHVybihyZXQpOwotQEAgLTc4LDYgKzgw LDggQEAgaW50IEVWUF9DSVBIRVJfYXNuMV90b19wYXJhbShFVlBfQ0lQSEVSXwotIAotIAlpZiAo Yy0+Y2lwaGVyLT5nZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCi0gCQlyZXQ9Yy0+Y2lwaGVy LT5nZXRfYXNuMV9wYXJhbWV0ZXJzKGMsdHlwZSk7Ci0rCWVsc2UgaWYgKGMtPmNpcGhlci0+Zmxh Z3MgJiBFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKLSsJCXJldD1FVlBfQ0lQSEVSX2dldF9h c24xX2l2KGMsIHR5cGUpOwotIAllbHNlCi0gCQlyZXQ9LTE7Ci0gCXJldHVybihyZXQpOwotQEAg LTE4Niw2ICsxOTAsOSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBf Ci0gCi0gaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq b3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKLSAJewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAly ZXR1cm4gY3R4LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCk7Ci0gCX0KLSAKLUBA IC0yOTUsMyArMzAyLDE4IEBAIGludCBFVlBfTURfQ1RYX3Rlc3RfZmxhZ3MoY29uc3QgRVZQX01E X0MKLSAJewotIAlyZXR1cm4gKGN0eC0+ZmxhZ3MgJiBmbGFncyk7Ci0gCX0KLSsKLSt2b2lkIEVW UF9DSVBIRVJfQ1RYX3NldF9mbGFncyhFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3MpCi0r CXsKLSsJY3R4LT5mbGFncyB8PSBmbGFnczsKLSsJfQotKwotK3ZvaWQgRVZQX0NJUEhFUl9DVFhf Y2xlYXJfZmxhZ3MoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKQotKwl7Ci0rCWN0eC0+ ZmxhZ3MgJj0gfmZsYWdzOwotKwl9Ci0rCi0raW50IEVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3Mo Y29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IGZsYWdzKQotKwl7Ci0rCXJldHVybiAoY3R4 LT5mbGFncyAmIGZsYWdzKTsKLSsJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZXZwL2V2cF9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvZXZw X2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZp cHMJMjAxMC0wMi0xNiAyMjo1ODozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9ldnAvZXZwX2xvY2wuaAkyMDEwLTAyLTE2IDIzOjQ0OjQ0LjAwMDAwMDAw MCArMDEwMAotQEAgLTExMSwxMSArMTExLDExIEBAIHN0YXRpYyBpbnQgY25hbWUjI19jYmNfY2lw aGVyKEVWUF9DSVBIRVIKLSBzdGF0aWMgaW50IGNuYW1lIyNfY2ZiIyNjYml0cyMjX2NpcGhlcihF VlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmluLCBzaXplX3QgaW5sKSBcCi0ge1wKLSAJc2l6ZV90IGNodW5rPUVWUF9NQVhDSFVOSztc Ci0tCWlmIChjYml0cz09MSkgIGNodW5rPj49MztcCi0rCWlmIChjYml0cz09MSAmJiAhKGN0eC0+ ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTKSkgIGNodW5rPj49MztcCi0gCWlmIChp bmw8Y2h1bmspIGNodW5rPWlubDtcCi0gCXdoaWxlKGlubCAmJiBpbmw+PWNodW5rKVwKLSAJICAg IHtcCi0tCSAgICBjcHJlZml4IyNfY2ZiIyNjYml0cyMjX2VuY3J5cHQoaW4sIG91dCwgKGxvbmcp KGNiaXRzPT0xP2NodW5rKjg6Y2h1bmspLCAmKChrc3RydWN0ICopY3R4LT5jaXBoZXJfZGF0YSkt PmtzY2hlZCwgY3R4LT5pdiwgJmN0eC0+bnVtLCBjdHgtPmVuY3J5cHQpO1wKLSsJICAgIGNwcmVm aXgjI19jZmIjI2NiaXRzIyNfZW5jcnlwdChpbiwgb3V0LCAobG9uZykoY2JpdHM9PTEgJiYgIShj dHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk/Y2h1bmsqODpjaHVuayksICYo KGtzdHJ1Y3QgKiljdHgtPmNpcGhlcl9kYXRhKS0+a3NjaGVkLCBjdHgtPml2LCAmY3R4LT5udW0s IGN0eC0+ZW5jcnlwdCk7XAotIAkgICAgaW5sLT1jaHVuaztcCi0gCSAgICBpbiArPWNodW5rO1wK LSAJICAgIG91dCs9Y2h1bms7XAotQEAgLTI1NCwxNCArMjU0LDMyIEBAIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF8jI2NuYW1lIyNfZWNiKHZvaWQKLSAKLSAjZGVmaW5lIEVWUF9DX0RBVEEoa3N0cnVj dCwgY3R4KQkoKGtzdHJ1Y3QgKikoY3R4KS0+Y2lwaGVyX2RhdGEpCi0gCi0tI2RlZmluZSBJTVBM RU1FTlRfQ0ZCUihjaXBoZXIsY3ByZWZpeCxrc3RydWN0LGtzY2hlZCxrZXlzaXplLGNiaXRzLGl2 X2xlbikgXAotKyNkZWZpbmUgSU1QTEVNRU5UX0NGQlIoY2lwaGVyLGNwcmVmaXgsa3N0cnVjdCxr c2NoZWQsa2V5c2l6ZSxjYml0cyxpdl9sZW4sZmwpIFwKLSAJQkxPQ0tfQ0lQSEVSX2Z1bmNfY2Zi KGNpcGhlciMjXyMja2V5c2l6ZSxjcHJlZml4LGNiaXRzLGtzdHJ1Y3Qsa3NjaGVkKSBcCi0gCUJM T0NLX0NJUEhFUl9kZWZfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxrc3RydWN0LCBcCi0gCQkJICAg ICBOSURfIyNjaXBoZXIjI18jI2tleXNpemUsIGtleXNpemUvOCwgaXZfbGVuLCBjYml0cywgXAot LQkJCSAgICAgMCwgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIFwKLS0JCQkgICAgIEVWUF9DSVBI RVJfc2V0X2FzbjFfaXYsIFwKLS0JCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsIFwKLS0J CQkgICAgIE5VTEwpCi0rCQkJICAgICAoZmwpfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLCBc Ci0rCQkJICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKLSsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9z ZXRfa2V5Ci0rI2RlZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5Ci0rI2RlZmlu ZSBDQVNUX3NldF9rZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKLSsjZGVmaW5lIFJDNV8zMl9zZXRf a2V5CXByaXZhdGVfUkM1XzMyX3NldF9rZXkKLSsjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9C Rl9zZXRfa2V5Ci0rI2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkKLSsj ZGVmaW5lIENhbWVsbGlhX3NldF9rZXkgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5Ci0rI2RlZmlu ZSBpZGVhX3NldF9lbmNyeXB0X2tleSBwcml2YXRlX2lkZWFfc2V0X2VuY3J5cHRfa2V5Ci0rCi0r I2RlZmluZSBNRDVfSW5pdAlwcml2YXRlX01ENV9Jbml0Ci0rI2RlZmluZSBNRDRfSW5pdAlwcml2 YXRlX01ENF9Jbml0Ci0rI2RlZmluZSBNRDJfSW5pdAlwcml2YXRlX01EMl9Jbml0Ci0rI2RlZmlu ZSBNREMyX0luaXQJcHJpdmF0ZV9NREMyX0luaXQKLSsjZGVmaW5lIFNIQV9Jbml0CXByaXZhdGVf U0hBX0luaXQKLSsjZGVmaW5lIFJJUEVNRDE2MF9Jbml0CXByaXZhdGVfUklQRU1EMTYwX0luaXQK LSsjZGVmaW5lIFdISVJMUE9PTF9Jbml0CXByaXZhdGVfV0hJUkxQT09MX0luaXQKLSsKLSsjZW5k aWYKLSAKLSBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0Ci0gCXsKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZXZwL21fZHNzLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9kc3Mu Yy5maXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vZXZwL21fZHNzLmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAw MDAgKzAxMDAKLUBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNhX21kPQot IAlOSURfZHNhV2l0aFNIQSwKLSAJTklEX2RzYVdpdGhTSEEsCi0gCVNIQV9ESUdFU1RfTEVOR1RI LAotLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1R8 RVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdCwKLSAJdXBkYXRlLAotIAlmaW5hbCwKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2V2cC9tX2RzczEuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL2V2cC9tX2RzczEuYy5maXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICswMjAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL21fZHNzMS5jCTIwMTAtMDItMTYg MjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtODIsNyArODIsNyBAQCBzdGF0aWMgY29uc3Qg RVZQX01EIGRzczFfbWQ9Ci0gCU5JRF9kc2EsCi0gCU5JRF9kc2FXaXRoU0hBMSwKLSAJU0hBX0RJ R0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBfTURfRkxBR19Q S0VZX0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFs LAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL21fbWRjMi5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL21fbWRjMi5jCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vZXZwL21fbWRjMi5jLmZpcHMJMjAwNC0wNS0xNSAxMzoyOTo0OC4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9tZGMyLmMJ MjAxMC0wMi0xNiAyMzo0ODo0NC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02Niw2ICs2Niw3IEBACi0g I2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL21kYzIuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSBzdGF0 aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQotIAl7IHJldHVybiBNREMyX0luaXQoY3R4LT5t ZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL21fbWQy LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9tZDIuYwotLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzoz Mi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9t ZDIuYwkyMDEwLTAyLTE2IDIzOjQ3OjUyLjAwMDAwMDAwMCArMDEwMAotQEAgLTY4LDYgKzY4LDcg QEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0g I2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9N RF9DVFggKmN0eCkKLSAJeyByZXR1cm4gTUQyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL21fbWQ0LmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9ldnAvbV9tZDQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL2V2cC9tX21kNC5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9tZDQuYwkyMDEwLTAyLTE2IDIz OjQ4OjA3LjAwMDAwMDAwMCArMDEwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5T U0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUg ImV2cF9sb2NsLmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyBy ZXR1cm4gTUQ0X0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vZXZwL21fbWQ1LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9l dnAvbV9tZDUuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX21kNS5jLmZp cHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9ldnAvbV9tZDUuYwkyMDEwLTAyLTE2IDIzOjQ4OjI0LjAwMDAwMDAwMCAr MDEwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0g c3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gTUQ1X0luaXQoY3R4 LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL21f cmlwZW1kLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV9yaXBlbWQuYwot LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX3JpcGVtZC5jLmZpcHMJMjAwNS0w Ny0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9ldnAvbV9yaXBlbWQuYwkyMDEwLTAyLTE2IDIzOjQ5OjAzLjAwMDAwMDAwMCArMDEwMAot QEAgLTY4LDYgKzY4LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gI2luY2x1ZGUgPG9w ZW5zc2wvcnNhLmg+Ci0gI2VuZGlmCi0rI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0gc3RhdGlj IGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gUklQRU1EMTYwX0luaXQoY3R4 LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL21f c2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL21fc2hhMS5jCi0tLS0g b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAwOC0wMy0xMiAy MjoxNDoyNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9l dnAvbV9zaGExLmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC04Miw3 ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZD0KLSAJTklEX3NoYTEsCi0gCU5J RF9zaGExV2l0aFJTQUVuY3J5cHRpb24sCi0gCVNIQV9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURf RkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAot KwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQUywKLSAJaW5pdCwKLSAJdXBkYXRlLAotIAlmaW5h bCwKLUBAIC0xMTksNyArMTIwLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRfbWQ9Ci0g CU5JRF9zaGEyMjQsCi0gCU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMjI0X0RJ R0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURf RkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlp bml0MjI0LAotIAl1cGRhdGUyNTYsCi0gCWZpbmFsMjU2LAotQEAgLTEzOCw3ICsxNDAsOCBAQCBz dGF0aWMgY29uc3QgRVZQX01EIHNoYTI1Nl9tZD0KLSAJTklEX3NoYTI1NiwKLSAJTklEX3NoYTI1 NldpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZM QUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJ RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQyNTYsCi0gCXVwZGF0ZTI1NiwKLSAJ ZmluYWwyNTYsCi1AQCAtMTY5LDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMzg0 X21kPQotIAlOSURfc2hhMzg0LAotIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24sCi0gCVNI QTM4NF9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8 RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZMQUdfRklQ UywKLSAJaW5pdDM4NCwKLSAJdXBkYXRlNTEyLAotIAlmaW5hbDUxMiwKLUBAIC0xODgsNyArMTky LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQ9Ci0gCU5JRF9zaGE1MTIsCi0gCU5J RF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBNTEyX0RJR0VTVF9MRU5HVEgsCi0tCUVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdB TEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0NTEyLAotIAl1cGRhdGU1 MTIsCi0gCWZpbmFsNTEyLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZw L21fd3AuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9tX3dwLmMKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvbV93cC5jLmZpcHMJMjAwNS0xMS0zMCAyMTo1 NzoyMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAv bV93cC5jCTIwMTAtMDItMTYgMjM6NDk6MjIuMDAwMDAwMDAwICswMTAwCi1AQCAtOSw2ICs5LDcg QEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUw OS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3docmxwb29sLmg+Ci0rI2luY2x1ZGUgImV2cF9sb2Ns LmgiCi0gCi0gc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKLSAJeyByZXR1cm4gV0hJ UkxQT09MX0luaXQoY3R4LT5tZF9kYXRhKTsgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vZXZwL25hbWVzLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAv bmFtZXMuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9uYW1lcy5jLmZpcHMJ MjAwOS0wNC0xMCAxMjozMDoyNy4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9ldnAvbmFtZXMuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEw MAotQEAgLTY2LDYgKzY2LDEwIEBAIGludCBFVlBfYWRkX2NpcGhlcihjb25zdCBFVlBfQ0lQSEVS ICpjKQotIAl7Ci0gCWludCByOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9p bml0X2xpYnJhcnkoKTsKLSsjZW5kaWYKLSsKLSAJcj1PQkpfTkFNRV9hZGQoT0JKX25pZDJzbihj LT5uaWQpLE9CSl9OQU1FX1RZUEVfQ0lQSEVSX01FVEgsKGNvbnN0IGNoYXIgKiljKTsKLSAJaWYg KHIgPT0gMCkgcmV0dXJuKDApOwotIAljaGVja19kZWZlcihjLT5uaWQpOwotQEAgLTc5LDYgKzgz LDEwIEBAIGludCBFVlBfYWRkX2RpZ2VzdChjb25zdCBFVlBfTUQgKm1kKQotIAlpbnQgcjsKLSAJ Y29uc3QgY2hhciAqbmFtZTsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCU9QRU5TU0xfaW5p dF9saWJyYXJ5KCk7Ci0rI2VuZGlmCi0rCi0gCW5hbWU9T0JKX25pZDJzbihtZC0+dHlwZSk7Ci0g CXI9T0JKX05BTUVfYWRkKG5hbWUsT0JKX05BTUVfVFlQRV9NRF9NRVRILChjb25zdCBjaGFyICop bWQpOwotIAlpZiAociA9PSAwKSByZXR1cm4oMCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9l dnAvcF9zaWduLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9ldnAvcF9zaWduLmMu ZmlwcwkyMDA2LTA1LTI0IDE1OjI5OjMwLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2V2cC9wX3NpZ24uYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAw MCArMDEwMAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotIAotICNpZmRlZiB1bmRlZgotIHZvaWQgRVZQX1Np Z25Jbml0KEVWUF9NRF9DVFggKmN0eCwgRVZQX01EICp0eXBlKQotQEAgLTEwMSw2ICsxMDIsMjIg QEAgaW50IEVWUF9TaWduRmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNpZwotIAkJCWdvdG8gZXJy OwotIAkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2Vz dCkgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX1BBRF9YOTMxKQotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4 LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZs YWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCi0rCQkJewotKwkJCWludCBzYWx0bGVuOwot KwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNT X1BBRERJTkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9D VFhfRkxBR19QU1NfU0FMVChjdHgpOwotKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxB R19QU1NfTURMRU4pCi0rCQkJCXNhbHRsZW4gPSAtMTsKLSsJCQllbHNlIGlmIChzYWx0bGVuID09 IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9IC0yOwotKwkJCWlmIChF VlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsJ CQkJZ290byBlcnI7Ci0rCQkJfQotIAkJaWYgKEVWUF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3JldCwg JnNsdG1wLCBtLCBtX2xlbikgPD0gMCkKLSAJCQlnb3RvIGVycjsKLSAJCSpzaWdsZW4gPSBzbHRt cDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9ldnAvcF92ZXJpZnkuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6 MDEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZXZwL3Bf dmVyaWZ5LmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02MSw2ICs2 MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb2Jq ZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KLSAKLSBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uc3QgdW5z aWduZWQgY2hhciAqc2lnYnVmLAotIAkgICAgIHVuc2lnbmVkIGludCBzaWdsZW4sIEVWUF9QS0VZ ICpwa2V5KQotQEAgLTg2LDYgKzg3LDIyIEBAIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NU WCAqY3R4LCBjb24KLSAJCQlnb3RvIGVycjsKLSAJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25h dHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCi0gCQkJZ290byBlcnI7Ci0rCQlpZiAo Y3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKLSsJCQlpZiAoRVZQX1BLRVlf Q1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykgPD0gMCkKLSsJCQkJ Z290byBlcnI7Ci0rCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKQot KwkJCXsKLSsJCQlpbnQgc2FsdGxlbjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFk ZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsK LSsJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKLSsJCQlpZiAo c2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQotKwkJCQlzYWx0bGVuID0gLTE7 Ci0rCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCi0rCQkJ CXNhbHRsZW4gPSAtMjsKLSsJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4o cGtjdHgsIHNhbHRsZW4pIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCX0KLSAJCWkgPSBFVlBf UEtFWV92ZXJpZnkocGtjdHgsIHNpZ2J1Ziwgc2lnbGVuLCBtLCBtX2xlbik7Ci0gCQllcnI6Ci0g CQlFVlBfUEtFWV9DVFhfZnJlZShwa2N0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX2Flc2F2cy5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCww ICsxLDkzOSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAq ICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNUIEFFUyBBbGdvcml0aG0gVmFs aWRhdGlvbiBTdWl0ZQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBEb25hdGVkIHRvIE9wZW5TU0wg Ynk6Ci0rICBWLU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAz MDAKLSsgIEdlcm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4KLSsgIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKyNpbmNsdWRlIDxzdGRpby5o PgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PGVycm5vLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1 ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgQUVTIHN1cHBvcnRc biIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotKyNkZWZpbmUgQUVTX0JMT0NL X1NJWkUgMTYKLSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2ludCBBRVNUZXN0KEVWUF9DSVBI RVJfQ1RYICpjdHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hh ciAqYUtleSwgCi0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAgIGludCBkaXIsICAv KiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNoYXIgKnBsYWlu dGV4dCwgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbikKLSsgICAgewotKyAgICBj b25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAgICBpZiAoc3RyY2FzZWNtcChh bW9kZSwgIkNCQyIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNl IDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwotKwkJYnJlYWs7Ci0rCi0rCQlj YXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOwotKwkJYnJlYWs7Ci0rCi0r CQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOwotKwkJYnJlYWs7Ci0r CQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDAp Ci0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9 IEVWUF9hZXNfMTI4X2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhl ciA9IEVWUF9hZXNfMTkyX2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNp cGhlciA9IEVWUF9hZXNfMjU2X2VjYigpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxz ZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDApCi0rCXsKLSsJc3dpdGNoIChh a2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEy OCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTky X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9h ZXNfMjU2X2NmYjEyOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAo c3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6 KQotKwkJewotKwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9vZmIoKTsKLSsJ CWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9vZmIoKTsK LSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9vZmIo KTsKLSsJCWJyZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUs IkNGQjEiKSkKLSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJ Y2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAy NTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJ fQotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCXsKLSsJc3dpdGNo IChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2Nm YjgoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5 Ml9jZmI4KCk7Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Fl c18yNTZfY2ZiOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZQotKwl7Ci0rCXBy aW50ZigiVW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gMDsKLSsJfQotKyAg ICBpZiAoIWNpcGhlcikKLSsJewotKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBh a2V5c3opOwotKwlyZXR1cm4gMDsgCi0rCX0KLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0 eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCi0rCXJldHVybiAwOwotKyAg ICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9m bGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwotKyAgICBpZiAoZGlyKQotKwkJ RVZQX0NpcGhlcihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKLSsJZWxzZQotKwkJ RVZQX0NpcGhlcihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsgICAgcmV0dXJu IDE7Ci0rICAgIH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQi fTsKLStjaGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4Iiwi Q0ZCMTI4In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkIxMjh9 OwotK2VudW0gWENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9OwotKwotKy8qPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0qLwotKy8qICBNb250ZSBDYXJsbyBUZXN0cyAgICAgICAgICAqLwot Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKy8qI2RlZmluZSBnYihhLGIp ICgoKGEpWyhiKS84XSA+PiAoKGIpJTgpKSYxKSovCi0rLyojZGVmaW5lIHNiKGEsYix2KSAoKGEp WyhiKS84XT0oKGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCghISh2KSA8PCAoKGIpJTgpKSkq LwotKwotKyNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKDctKGIpJTgpKSYxKQotKyNk ZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoNy0oYiklOCkp KXwoISEodikgPDwgKDctKGIpJTgpKSkKLSsKLStpbnQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKLSsJ ICAgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNpZ25lZCBjaGFyICppVmVjLAot KwkgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICBGSUxFICpy ZnApCi0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzEw MV1bMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVTX0JMT0NLX1NJWkVdOwotKyAg ICB1bnNpZ25lZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKLSsgICAgdW5zaWduZWQgY2hhciBjdGV4 dFsxMDAxXVszMl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs2NCs0XTsKLSsgICAg aW50IGksIGosIG4sIG4xLCBuMjsKLSsgICAgaW50IGltb2RlID0gMCwgbmtleXN6ID0gYWtleXN6 Lzg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgm Y3R4KTsKLSsKLSsgICAgaWYgKGxlbiA+IDMyKQotKwl7Ci0rCXByaW50ZigiXG4+Pj4+IExlbmd0 aCBleGNlZWRzIDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAotKwkgICAgICAgYW1vZGUsIGFrZXlz eik7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICBmb3IgKGltb2RlID0gMDsgaW1vZGUgPCA2OyAr K2ltb2RlKQotKwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1vZGVdKSA9PSAwKQotKwkgICAg YnJlYWs7Ci0rICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVjb2duaXpl ZCBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsgICAgbWVtY3B5 KGtleVswXSwgYUtleSwgbmtleXN6KTsKLSsgICAgaWYgKGlWZWMpCi0rCW1lbWNweShpdlswXSwg aVZlYywgQUVTX0JMT0NLX1NJWkUpOwotKyAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwltZW1j cHkocHRleHRbMF0sIHRleHQsIGxlbik7Ci0rICAgIGVsc2UKLSsJbWVtY3B5KGN0ZXh0WzBdLCB0 ZXh0LCBsZW4pOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpCi0rCXsKLSsJLyogcHJp bnRmKCJJdGVyYXRpb24gJWRcbiIsIGkpOyAqLwotKwlpZiAoaSA+IDApCi0rCSAgICB7Ci0rCSAg ICBmcHJpbnRmKHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKLSsJICAgIE91dHB1dFZhbHVlKCJLRVki LGtleVtpXSxua2V5c3oscmZwLDApOwotKwkgICAgaWYgKGltb2RlICE9IEVDQikgIC8qIEVDQiAq LwotKwkJT3V0cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tfU0laRSxyZnAsMCk7Ci0rCSAg ICAvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwotKwkgICAgT3V0cHV0VmFsdWUo dF90YWdbZGlyXjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0sbGVuLHJmcCwKLSsJCQlpbW9k ZSA9PSBDRkIxKTsKLSsJICAgIH0KLSsJZm9yIChqID0gMDsgaiA8IDEwMDA7ICsraikKLSsJICAg IHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCWlmIChq ID09IDApCi0rCQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAqLwotKwkJICAgIHJldCA9IEFF U1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxMLCAKLSsJCQkJICBkaXIsICAv KiAwID0gZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0s IGxlbik7Ci0rCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQltZW1jcHkocHRleHRbaisx XSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBw dGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChk aXIgPT0gWEVOQ1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0 ZXh0W2pdLCBsZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKLSsJ CQl9Ci0rCQkgICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBj dGV4dFtqXSwgbGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7Ci0r CQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNl IE9GQjogIAotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAgIHsKLSsJ CSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAot KwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHB0ZXh0 W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCW1l bWNweShwdGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0 ZXh0W2orMV0sIGl2W2ldLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkg ICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4 dFtqXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMV0s IGxlbik7Ci0rCQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBw dGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2ot MV0sIGxlbik7Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkI4 OgotKwkJaWYgKGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBh bW9kZSwgYWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlw dCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkg ICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJ CUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UK LSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9 Ci0rCQlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJCSAgICBpZiAoaiA8IDE2KQot KwkJCW1lbWNweShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJ CW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNl Ci0rCQkgICAgewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sICZp dltpXVtqXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0 W2otMTZdLCBsZW4pOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkIxOgot KwkJaWYoaiA9PSAwKQotKwkJICAgIHsKLSsjaWYgMAotKwkJICAgIC8qIGNvbXBlbnNhdGUgZm9y IHdyb25nIGVuZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLwotKwkJICAgIGlmKGkgPT0gMCkKLSsJ CQlwdGV4dFswXVswXTw8PTc7Ci0rI2VuZGlmCi0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LGFt b2RlLGFrZXlzeixrZXlbaV0saXZbaV0sZGlyLAotKwkJCQlwdGV4dFtqXSwgY3RleHRbal0sIGxl bik7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNS WVBUKQotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJ ICAgIGVsc2UKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsK LSsKLSsJCSAgICB9Ci0rCQlpZihkaXIgPT0gWEVOQ1JZUFQpCi0rCQkgICAgewotKwkJICAgIGlm KGogPCAxMjgpCi0rCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKLSsJCSAgICBlbHNl Ci0rCQkJc2IocHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSwwKSk7Ci0rCQkgICAgfQotKwkJ ZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJCXNiKGN0ZXh0W2orMV0sMCxn YihpdltpXSxqKSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihwdGV4dFtq LTEyOF0sMCkpOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwktLWo7IC8q IHJlc2V0IHRvIGxhc3Qgb2YgcmFuZ2UgKi8KLSsJLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFp bnRleHQgKi8KLSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIgPyBjdGV4dFtqXSA6IHB0ZXh0 W2pdLGxlbixyZnAsCi0rCQkgICAgaW1vZGUgPT0gQ0ZCMSk7Ci0rCWZwcmludGYocmZwLCAiXG4i KTsgIC8qIGFkZCBzZXBhcmF0b3IgKi8KLSsKLSsJLyogQ29tcHV0ZSBuZXh0IEtFWSAqLwotKwlp ZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0r CQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlm b3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkg ICAgY2lwaGVydGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYo aW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5 c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihjdGV4dFtqLW4yXSww KSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQlj YXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbal0sIDE2KTsKLSsJCSAg ICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtq LTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIGN0ZXh0W2pdLCAxNik7Ci0r CQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3Rl eHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBjdGV4dFtqXSwgMTYp OwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkg ICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0g fHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBu a2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBwdGV4dFtqLW4yXVsw XTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0w LG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVy dGV4dCxuMSxnYihwdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2gg KGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4 dCwgcHRleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1l bWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0 ZXh0KzgsIHB0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAg ICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBo ZXJ0ZXh0KzE2LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAg IH0KLSsJLyogQ29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBLZXlbaV0geG9yIGN0ICovCi0r CWZvciAobiA9IDA7IG4gPCBua2V5c3o7ICsrbikKLSsJICAgIGtleVtpKzFdW25dID0ga2V5W2ld W25dIF4gY2lwaGVydGV4dFtuXTsKLSsJCi0rCS8qIENvbXB1dGUgbmV4dCBJViBhbmQgdGV4dCAq LwotKwlpZiAoZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgc3dpdGNoIChpbW9kZSkK LSsJCXsKLSsJICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqXSwgQUVT X0JMT0NLX1NJWkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNhc2UgT0ZC OgotKwkgICAgY2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsxXSwgY3RleHRbal0sIEFFU19C TE9DS19TSVpFKTsKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRbai0xXSwgQUVTX0JMT0NLX1NJ WkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQkvKiBJVltpKzFdID0gY3QgKi8K LSsJCWZvciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQotKwkJICAgIGl2 W2krMV1bbjFdID0gY3RleHRbai1uMl1bMF07Ci0rCQlwdGV4dFswXVswXSA9IGN0ZXh0W2otMTZd WzBdOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlmb3IobjE9MCxuMj0xMjcgOyBu MSA8IDEyOCA7ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFdLG4xLGdiKGN0ZXh0W2otbjJd LDApKTsKLSsJCXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYweDgwOwotKwkJYnJlYWs7Ci0r CQl9Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7 Ci0rCSAgICBjYXNlIEVDQjoKLSsJCW1lbWNweShjdGV4dFswXSwgcHRleHRbal0sIEFFU19CTE9D S19TSVpFKTsKLSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjoKLSsJ ICAgIGNhc2UgQ0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tf U0laRSk7Ci0rCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsK LSsJCWJyZWFrOwotKwkgICAgY2FzZSBDRkI4OgotKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4x IDwgMTY7ICsrbjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0gPSBwdGV4dFtqLW4yXVswXTsK LSsJCWN0ZXh0WzBdWzBdID0gcHRleHRbai0xNl1bMF07Ci0rCQlicmVhazsKLSsJICAgIGNhc2Ug Q0ZCMToKLSsJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQotKwkJICAg IHNiKGl2W2krMV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJY3RleHRbMF1bMF09cHRleHRb ai0xMjhdWzBdJjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJfQotKyAgICAKLSsg ICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ki8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSsgICMgQ29uZmlnIGluZm8gZm9yIHYtb25lCi0rICAjIEFFU1ZTIE1NVCB0ZXN0IGRhdGEgZm9y IEVDQgotKyAgIyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQKLSsgICMgS2V5IExlbmd0aCA6 IDI1NgotKyAgIyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCi0rICAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KLSsKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmls ZSkKLSsgICAgewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklMRSAqYWZw ID0gTlVMTCwgKnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XTsKLSsgICAgY2hhciB0 YnVmWzIwNDhdOwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOwotKyAgICBjaGFyIGFsZ29b OF0gPSAiIjsKLSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0WzhdID0g IiI7Ci0rICAgIGludCBha2V5c3ogPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBh S2V5WzQwXTsKLSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5z aWduZWQgY2hhciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4 dFsyMDQ4XTsKLSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAg RVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFm aWxlKSkKLSsJewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9 Ci0rICAgIHN0cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZu LCAiciIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVz XG4iLCAKLSsJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9 Ci0rICAgIGlmICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0 cihyZm4sInJlcS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJ ICAgIHJwPXN0cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1l bWNweShycCwicnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHko cnAsICIucnNwIiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBm b3Blbihyc3BmaWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4g ZmlsZTogJXMsICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNs b3NlKGFmcCk7Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAo IWVyciAmJiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0r CXRpZHlfbGluZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyogICAg ICBwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsgKi8KLSsJc3dpdGNoIChzdGVw KQotKwkgICAgewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCi0rCSAgICBpZiAoaWJ1 ZlswXSA9PSAnXG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KLSsJCWlmICgoKmFsZ28g PT0gJ1wwJykgfHwKLSsJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8Ci0rCQkgICAgKGFrZXlzeiA9 PSAwKSkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5nIEFsZ29yaXRobSwgTW9kZSBv ciBLZXlTaXplICglcy8lcy8lZClcbiIsCi0rCQkJICAgYWxnbyxhbW9kZSxha2V5c3opOwotKwkJ ICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhp YnVmLCByZnApOwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQotKwkJfQotKwkgICAgZWxzZSBp ZiAoaWJ1ZlswXSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRl bTogJXNcbiIsIGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsgLyog cHJvY2VzcyBwcmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKLSsJCWludCBu OwotKwkJaWYgKGFrZXlzeikKLSsJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRl ICovCi0rCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYocmZwLCAi IyAlcyIsIGN0aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAg ICBmcHV0cyhpYnVmLCByZnApOwotKwkJICAgIGlmIChzdHJuY21wKHBwLCAiQUVTVlMgIiwgNikg PT0gMCkKLSsJCQl7Ci0rCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsKLSsJCQkvKiBnZXQgdGVzdCB0 eXBlICovCi0rCQkJcHAgKz0gNjsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0g eHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsK LSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1v ZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEs IG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0r CQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdCA9ICVzLCBNb2RlID0gJXNcbiIsIGF0 ZXN0LCBhbW9kZSk7Ci0rCQkJfQotKwkJICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKHBwLCAiS2V5 IExlbmd0aCA6ICIsIDEzKSA9PSAwKQotKwkJCXsKLSsJCQlha2V5c3ogPSBhdG9pKHBwKzEzKTsK LSsJCQlpZiAoVkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJLZXkgc2l6ZSA9ICVkXG4iLCBha2V5c3op OwotKwkJCX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAxOiAgLyog W0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7 Ci0rCQlmcHV0cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJaWYgKHN0cm5jYXNlY21wKGli dWYsICJbRU5DUllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDE7Ci0rCQllbHNlIGlmIChz dHJuY2FzZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAwOwot KwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIs IGlidWYpOwotKwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAg ICBlbHNlIGlmIChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNz aW5nIEVOQ1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAg ZWxzZSAKLSsJCXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJICAg IGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQotKwkJYnJlYWs7Ci0r CSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJYnJlYWs7Ci0rCi0r CSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYpICE9IDApCi0rCQl7Ci0rCQlw cmludGYoIk1pc3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0r CQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8 IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVy ciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5 LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCQkgICAgewotKwkJ ICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkJICAgIHN0ZXAgPSAoZGlyKT8g NDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICAr K3N0ZXA7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8K LSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklW ID0gIiwgNSkgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIg PSAxOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1 Zis1LCBpVmVjKTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIklu dmFsaWQgSVZcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0r CQlQcmludFZhbHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0r CQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0r CSAgICBmcHV0cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJ TlRFWFQgPSAiLCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRc biIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0 cmxlbihpYnVmKzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49 YmludDJiaW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhl eDJiaW4oaWJ1ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJ CSAgICBwcmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVy ciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFp bnRleHQpKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0r CQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWlu dGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUg Q2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBpZihkb19tY3QoYW1vZGUsIGFrZXlzeiwg YUtleSwgaVZlYywgCi0rCQkJICAgICAgZGlyLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBs ZW4sIAotKwkJCSAgICAgIHJmcCkgPCAwKQotKwkJCUVYSVQoMSk7Ci0rCQkgICAgfQotKwkJZWxz ZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFL ZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwot KwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgi Q0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIx IikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNh c2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0r CSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKLSsJ CXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAg IGVsc2UKLSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49Ymlu dDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKLSsJCWVsc2UKLSsJ CSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkK LSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOwotKwkJICAg IGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCi0rCQlQcmludFZhbHVlKCJDSVBI RVJURVhUIiwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9 PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1v ZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJm cCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZj dHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNy eXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsK LSsJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4 dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0 ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJICAgIGlmIChpYnVm WzBdICE9ICdcbicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1p bmF0b3JcbiIpOwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0g MCkKLSsJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KLSsJCWZwdXRz KGlidWYsIHJmcCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJICAgIGJyZWFrOwotKwkgICAg fQotKwl9Ci0rICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwotKyAgICBpZiAoYWZwKQotKwlm Y2xvc2UoYWZwKTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQotKwotKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIFByb2Nlc3NlcyBlaXRo ZXIgYSBzaW5nbGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBw YXNzZWQgaW4gYSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6Ci0rICAg IGFlc190ZXN0IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoK LSsgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4 dAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgY2hhciAqcnFs aXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUgKmZwID0gTlVMTDsK LSsgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7Ci0rICAgIGludCBmX29wdCA9 IDAsIGRfb3B0ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmKCFGSVBTX21v ZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlFWElUKDEpOwotKwl9Ci0r I2VuZGlmCi0rICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFd LCAiLWQiKSA9PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAxOwotKwkgICAgfQotKwllbHNl IGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0rCSAgICB7Ci0rCSAgICBmX29w dCA9IDE7Ci0rCSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAg IHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKLSsJICAgIHJldHVy biAwOwotKwkgICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIk1p c3NpbmcgcGFyYW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoZF9v cHQpCi0rCSAgICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBzdHJj cHkoZm4sIGFyZ3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0rCSAgICB9Ci0rCX0K LSsgICAgaWYgKGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KLSsJ aWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJD YW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0K LSsJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0rCSAgICB7Ci0rCSAgICBzdHJ0 b2soZm4sICJcclxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7Ci0rCSAgICBpZiAoVkVSQk9T RSkKLSsJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAocHJvY19m aWxlKHJmbiwgcnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxl ZCBmb3I6ICVzIDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWZj bG9zZShmcCk7Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0rCWlmIChW RVJCT1NFKQotKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAocHJv Y19maWxlKGZuLCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nlc3Np bmcgZmFpbGVkIGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJVCgw KTsKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYwotLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzCTIwMTAtMDIt MTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi1AQCAtMCwwICsxLDcwMiBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0 IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu Ci0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0r ICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNUIERF UyBNb2RlcyBvZiBPcGVyYXRpb24gVmFsaWRhdGlvbiBTeXN0ZW0KLSsgIFRlc3QgUHJvZ3JhbQot KwotKyAgQmFzZWQgb24gdGhlIEFFUyBWYWxpZGF0aW9uIFN1aXRlLCB3aGljaCB3YXM6Ci0rICBE b25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0rICBWLU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2Vu dHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsgIEdlcm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4K LSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwot KyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3Ry aW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNs dWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwot KwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5v IEZJUFMgREVTIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0r Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot KyNkZWZpbmUgREVTX0JMT0NLX1NJWkUgOAotKwotKyNkZWZpbmUgVkVSQk9TRSAwCi0rCi0raW50 IERFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwKLSsJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtl eXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKLSsJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAot KwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkgICAgdW5z aWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGxlbikKLSsgICAgewotKyAg ICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAgICBpZiAoYWtleXN6ICE9 IDE5MikKLSsJewotKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOwot KwlFWElUKDEpOwotKwl9Ci0rCi0rICAgIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0g MCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NiYygpOwotKyAgICBlbHNlIGlmIChzdHJjYXNl Y21wKGFtb2RlLCAiRUNCIikgPT0gMCkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2VjYigpOwot KyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCNjQiKSA9PSAwKQotKwljaXBoZXIg PSBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsKLSsgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUs ICJPRkIiLCAzKSA9PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfb2ZiKCk7Ci0rICAgIGVs c2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKLSsJY2lwaGVyID0gRVZQX2Rlc19lZGUz X2NmYjgoKTsKLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwljaXBo ZXIgPSBFVlBfZGVzX2VkZTNfY2ZiMSgpOwotKyAgICBlbHNlCi0rCXsKLSsJcHJpbnRmKCJVbmtu b3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsKLSsgICAgaWYgKEVW UF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDAp Ci0rCXJldHVybiAwOwotKyAgICBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VW UF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwot KyAgICBFVlBfQ2lwaGVyKGN0eCwgb3V0LCBpbiwgbGVuKTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0r ICAgIH0KLSsKLSt2b2lkIERlYnVnVmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWws IGludCBsZW4pCi0rICAgIHsKLSsgICAgY2hhciBvYnVmWzIwNDhdOwotKyAgICBpbnQgb2xlbjsK LSsgICAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4sIG9idWYpOwotKyAgICBwcmludGYoIiVzID0g JS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsgICAgfQotKwotK3ZvaWQgc2hpZnRpbih1bnNp Z25lZCBjaGFyICpkc3QsdW5zaWduZWQgY2hhciAqc3JjLGludCBuYml0cykKLSsgICAgewotKyAg ICBpbnQgbjsKLSsKLSsgICAgLyogbW92ZSB0aGUgYnl0ZXMuLi4gKi8KLSsgICAgbWVtbW92ZShk c3QsZHN0K25iaXRzLzgsMyo4LW5iaXRzLzgpOwotKyAgICAvKiBhcHBlbmQgbmV3IGRhdGEgKi8K LSsgICAgbWVtY3B5KGRzdCszKjgtbmJpdHMvOCxzcmMsKG5iaXRzKzcpLzgpOwotKyAgICAvKiBs ZWZ0IHNoaWZ0IHRoZSBiaXRzICovCi0rICAgIGlmKG5iaXRzJTgpCi0rCWZvcihuPTAgOyBuIDwg Myo4IDsgKytuKQotKwkgICAgZHN0W25dPShkc3Rbbl0gPDwgKG5iaXRzJTgpKXwoZHN0W24rMV0g Pj4gKDgtbmJpdHMlOCkpOwotKyAgICB9CQotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQi LCAiQ0lQSEVSVEVYVCJ9OwotK2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwi Q0ZCMSIsIkNGQjgiLCJDRkI2NCJ9OwotK2VudW0gTW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwg Q0ZCOCwgQ0ZCNjR9OwotK2ludCBTaXplc1s2XT17NjQsNjQsNjQsMSw4LDY0fTsKLSsKLSt2b2lk IGRvX21jdChjaGFyICphbW9kZSwgCi0rCSAgICBpbnQgYWtleXN6LCBpbnQgbnVta2V5cywgdW5z aWduZWQgY2hhciAqYWtleSx1bnNpZ25lZCBjaGFyICppdmVjLAotKwkgICAgaW50IGRpciwgdW5z aWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKLSsJICAgIEZJTEUgKnJmcCkKLSsgICAgewotKyAg ICBpbnQgaSxpbW9kZTsKLSsgICAgdW5zaWduZWQgY2hhciBua1s0KjhdOyAvKiBsb25nZXN0IGtl eSs4ICovCi0rICAgIHVuc2lnbmVkIGNoYXIgdGV4dDBbOF07Ci0rCi0rICAgIGZvciAoaW1vZGU9 MCA7IGltb2RlIDwgNiA7ICsraW1vZGUpCi0rCWlmKCFzdHJjbXAoYW1vZGUsdF9tb2RlW2ltb2Rl XSkpCi0rCSAgICBicmVhazsKLSsgICAgaWYgKGltb2RlID09IDYpCi0rCXsgCi0rCXByaW50Zigi VW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9kZSk7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsKLSsg ICAgZm9yKGk9MCA7IGkgPCA0MDAgOyArK2kpCi0rCXsKLSsJaW50IGo7Ci0rCWludCBuOwotKwlp bnQga3A9YWtleXN6LzY0OwotKwl1bnNpZ25lZCBjaGFyIG9sZF9pdls4XTsKLSsJRVZQX0NJUEhF Ul9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKwlmcHJpbnRmKHJm cCwiXG5DT1VOVCA9ICVkXG4iLGkpOwotKwlpZihrcCA9PSAxKQotKwkgICAgT3V0cHV0VmFsdWUo IktFWSIsYWtleSw4LHJmcCwwKTsKLSsJZWxzZQotKwkgICAgZm9yKG49MCA7IG4gPCBrcCA7ICsr bikKLSsJCXsKLSsJCWZwcmludGYocmZwLCJLRVklZCIsbisxKTsKLSsJCU91dHB1dFZhbHVlKCIi LGFrZXkrbio4LDgscmZwLDApOwotKwkJfQotKwotKwlpZihpbW9kZSAhPSBFQ0IpCi0rCSAgICBP dXRwdXRWYWx1ZSgiSVYiLGl2ZWMsOCxyZnAsMCk7Ci0rCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl4x XSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7Ci0rI2lmIDAKLSsJLyogY29tcGVuc2F0ZSBm b3IgZW5kaWFubmVzcyAqLwotKwlpZihpbW9kZSA9PSBDRkIxKQotKwkgICAgdGV4dFswXTw8PTc7 Ci0rI2VuZGlmCi0rCW1lbWNweSh0ZXh0MCx0ZXh0LDgpOwotKwotKwlmb3Ioaj0wIDsgaiA8IDEw MDAwIDsgKytqKQotKwkgICAgewotKwkgICAgdW5zaWduZWQgY2hhciBvbGRfdGV4dFs4XTsKLSsK LSsJICAgIG1lbWNweShvbGRfdGV4dCx0ZXh0LDgpOwotKwkgICAgaWYoaiA9PSAwKQotKwkJewot KwkJbWVtY3B5KG9sZF9pdixpdmVjLDgpOwotKwkJREVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixh a2V5LGl2ZWMsZGlyLHRleHQsdGV4dCxsZW4pOwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJ bWVtY3B5KG9sZF9pdixjdHguaXYsOCk7Ci0rCQlFVlBfQ2lwaGVyKCZjdHgsdGV4dCx0ZXh0LGxl bik7Ci0rCQl9Ci0rCSAgICBpZihqID09IDk5OTkpCi0rCQl7Ci0rCQlPdXRwdXRWYWx1ZSh0X3Rh Z1tkaXJdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKLSsJCS8qCQltZW1jcHkoaXZlYyx0 ZXh0LDgpOyAqLwotKwkJfQotKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIml2IixjdHguaXYsOCk7 ICovCi0rCSAgICAvKiBhY2N1bXVsYXRlIG1hdGVyaWFsIGZvciB0aGUgbmV4dCBrZXkgKi8KLSsJ ICAgIHNoaWZ0aW4obmssdGV4dCxTaXplc1tpbW9kZV0pOwotKwkgICAgLyoJICAgIERlYnVnVmFs dWUoIm5rIixuaywyNCk7Ki8KLSsJICAgIGlmKChkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1v ZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NAotKwkJCXx8IGltb2RlID09IENCQykpIHx8IGlt b2RlID09IE9GQikKLSsJCW1lbWNweSh0ZXh0LG9sZF9pdiw4KTsKLSsKLSsJICAgIGlmKCFkaXIg JiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NCkpCi0r CQl7Ci0rCQkvKiB0aGUgdGVzdCBzcGVjaWZpZXMgdXNpbmcgdGhlIG91dHB1dCBvZiB0aGUgcmF3 IERFUyBvcGVyYXRpb24KLSsJCSAgIHdoaWNoIHdlIGRvbid0IGhhdmUsIHNvIHJlY29uc3RydWN0 IGl0Li4uICovCi0rCQlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCQkgICAgdGV4dFtuXV49b2xk X3RleHRbbl07Ci0rCQl9Ci0rCSAgICB9Ci0rCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJICAg IGFrZXlbbl1ePW5rWzE2K25dOwotKwlmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCSAgICBha2V5 Wzgrbl1ePW5rWzgrbl07Ci0rCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJICAgIGFrZXlbMTYr bl1ePW5rW25dOwotKwlpZihudW1rZXlzIDwgMykKLSsJICAgIG1lbWNweSgmYWtleVsyKjhdLGFr ZXksOCk7Ci0rCWlmKG51bWtleXMgPCAyKQotKwkgICAgbWVtY3B5KCZha2V5WzhdLGFrZXksOCk7 Ci0rCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKWFrZXkpOwotKwlERVNfc2V0X29k ZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSs4KSk7Ci0rCURFU19zZXRfb2RkX3Bhcml0eSgo REVTX2NibG9jayAqKShha2V5KzE2KSk7Ci0rCW1lbWNweShpdmVjLGN0eC5pdiw4KTsKLSsKLSsJ LyogcG9pbnRsZXNzIGV4ZXJjaXNlIC0gdGhlIGZpbmFsIHRleHQgZG9lc24ndCBkZXBlbmQgb24g dGhlCi0rCSAgIGluaXRpYWwgdGV4dCBpbiBPRkIgbW9kZSwgc28gd2hvIGNhcmVzIHdoYXQgaXQg aXM/IChXaG8KLSsJICAgZGVzaWduZWQgdGhlc2UgdGVzdHM/KSAqLwotKwlpZihpbW9kZSA9PSBP RkIpCi0rCSAgICBmb3Iobj0wIDsgbiA8IDggOyArK24pCi0rCQl0ZXh0W25dPXRleHQwW25dXm9s ZF9pdltuXTsKLSsJfQotKyAgICB9Ci0rICAgIAotK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxl LCBjaGFyICpyc3BmaWxlKQotKyAgICB7Ci0rICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOwot KyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0gTlVMTDsKLSsgICAgY2hhciBpYnVmWzIwNDhd LCB0YnVmWzIwNDhdOwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOwotKyAgICBjaGFyIGFt b2RlWzhdID0gIiI7Ci0rICAgIGNoYXIgYXRlc3RbMTAwXSA9ICIiOwotKyAgICBpbnQgYWtleXN6 PTA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlbNDBdOwotKyAgICBpbnQgZGly ID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsy MDQ4XTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIwNDhdOwotKyAgICBjaGFyICpy cDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBpbnQgbnVta2V5cz0xOwotKyAgICBF VlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZp bGUpKQotKwl7Ci0rCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOwotKwlyZXR1cm4gLTE7Ci0rCX0K LSsgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKLSsKLSsgICAgaWYgKChhZnAgPSBmb3BlbihhZm4s ICJyIikpID09IE5VTEwpCi0rCXsKLSsJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNc biIsIAotKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOwotKwlyZXR1cm4gLTE7Ci0rCX0K LSsgICAgaWYgKCFyc3BmaWxlKQotKwl7Ci0rCXN0cmNweShyZm4sYWZuKTsKLSsJcnA9c3Ryc3Ry KHJmbiwicmVxLyIpOwotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlpZiAoIXJwKQotKwkg ICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKLSsjZW5kaWYKLSsJYXNzZXJ0KHJwKTsKLSsJbWVt Y3B5KHJwLCJyc3AiLDMpOwotKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7Ci0rCW1lbWNweShy cCwgIi5yc3AiLCA0KTsKLSsJcnNwZmlsZSA9IHJmbjsKLSsJfQotKyAgICBpZiAoKHJmcCA9IGZv cGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCi0rCXsKLSsJcHJpbnRmKCJDYW5ub3Qgb3BlbiBm aWxlOiAlcywgJXNcbiIsIAotKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOwotKwlmY2xv c2UoYWZwKTsKLSsJYWZwID0gTlVMTDsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHdoaWxlICgh ZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCi0rCXsKLSsJ dGlkeV9saW5lKHRidWYsIGlidWYpOwotKwlpbGVuID0gc3RybGVuKGlidWYpOwotKwkvKglwcmlu dGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsqLwotKwlpZihzdGVwID09IDMgJiYgIXN0 cmNtcChhbW9kZSwiRUNCIikpCi0rCSAgICB7Ci0rCSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9m KGlWZWMpKTsKLSsJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAq LwotKwkgICAgfQotKwlzd2l0Y2ggKHN0ZXApCi0rCSAgICB7Ci0rCWNhc2UgMDogIC8qIHJlYWQg cHJlYW1ibGUgKi8KLSsJICAgIGlmIChpYnVmWzBdID09ICdcbicpCi0rCQl7IC8qIGVuZCBvZiBw cmVhbWJsZSAqLwotKwkJaWYgKCphbW9kZSA9PSAnXDAnKQotKwkJICAgIHsKLSsJCSAgICBwcmlu dGYoIk1pc3NpbmcgTW9kZVxuIik7Ci0rCQkgICAgZXJyID0gMTsKLSsJCSAgICB9Ci0rCQllbHNl Ci0rCQkgICAgewotKwkJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQkgICAgKysgc3RlcDsKLSsJ CSAgICB9Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChpYnVmWzBdICE9ICcjJykKLSsJCXsKLSsJCXBy aW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAlc1xuIiwgaWJ1Zik7Ci0rCQllcnIgPSAxOwot KwkJfQotKwkgICAgZWxzZQotKwkJeyAvKiBwcm9jZXNzIHByZWFtYmxlICovCi0rCQljaGFyICp4 cCwgKnBwID0gaWJ1ZisyOwotKwkJaW50IG47Ci0rCQlpZigqYW1vZGUpCi0rCQkgICAgeyAvKiBp bnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLwotKwkJICAgIHRpbWVfdCBydGltID0gdGltZSgw KTsKLSsJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMiLCBjdGltZSgmcnRpbSkpOwotKwkJICAgIH0K LSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICBpZigh c3RybmNtcChwcCwiSU5WRVJTRSAiLDgpIHx8ICFzdHJuY21wKHBwLCJERVMgIiw0KQotKwkJICAg ICAgIHx8ICFzdHJuY21wKHBwLCJUREVTICIsNSkKLSsJCSAgICAgICB8fCAhc3RybmNtcChwcCwi UEVSTVVUQVRJT04gIiwxMikKLSsJCSAgICAgICB8fCAhc3RybmNtcChwcCwiU1VCU1RJVFVUSU9O ICIsMTMpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlZBUklBQkxFICIsOSkpCi0rCQkJewot KwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KLSsJCQlpZighc3RybmNtcChwcCwiREVTICIsNCkpCi0r CQkJICAgIHBwKz00OwotKwkJCWVsc2UgaWYoIXN0cm5jbXAocHAsIlRERVMgIiw1KSkKLSsJCQkg ICAgcHArPTU7Ci0rCQkJeHAgPSBzdHJjaHIocHAsICcgJyk7Ci0rCQkJbiA9IHhwLXBwOwotKwkJ CXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKLSsJCQlhdGVzdFtuXSA9ICdcMCc7Ci0rCQkJLyogZ2V0 IG1vZGUgKi8KLSsJCQl4cCA9IHN0cnJjaHIocHAsICcgJyk7IC8qIGdldCBtb2RlIiAqLwotKwkJ CW4gPSBzdHJsZW4oeHArMSktMTsKLSsJCQlzdHJuY3B5KGFtb2RlLCB4cCsxLCBuKTsKLSsJCQlh bW9kZVtuXSA9ICdcMCc7Ci0rCQkJLyogYW1vZGVbM10gPSAnXDAnOyAqLwotKwkJCWlmIChWRVJC T1NFKQotKwkJCQlwcmludGYoIlRlc3Q9JXMsIE1vZGU9JXNcbiIsYXRlc3QsYW1vZGUpOwotKwkJ CX0KLSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAxOiAgLyogW0VOQ1JZ UFRdIHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZihpYnVmWzBdID09ICdcbicpCi0rCQlicmVhazsK LSsJICAgIGlmIChpYnVmWzBdID09ICdbJykKLSsJCXsKLSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0r CQkrK3N0ZXA7Ci0rCQlpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDAp Ci0rCQkgICAgZGlyID0gMTsKLSsJCWVsc2UgaWYgKHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQ VF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDA7Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAg IHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1Zik7Ci0rCQkgICAgZXJyID0gMTsK LSsJCSAgICB9Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKLSsJ CXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdv cmRcbiIpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIAotKwkJc3RlcCA9IDI7Ci0rCi0r CWNhc2UgMjogLyogS0VZID0geHh4eCAqLwotKwkgICAgaWYoKmlidWYgPT0gJ1xuJykKLSsJCXsK LSsJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJYnJlYWs7Ci0rICAgICAgICAgICAgICAg IH0KLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCi0rCQl7Ci0rCSAg ICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCWJyZWFrOwotKyAgICAgICAgICAgICAgICB9Ci0r CSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQ9Iiw2KSkKLSsJCXsKLSsJICAgICAgICBm cHV0cyhpYnVmLCByZnApOwotKwkJYnJlYWs7Ci0rICAgICAgICAgICAgICAgIH0KLSsJICAgIGlm KCFzdHJuY2FzZWNtcChpYnVmLCJOdW1LZXlzID0gIiwxMCkpCi0rCQl7Ci0rCQludW1rZXlzPWF0 b2koaWJ1ZisxMCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAKLSsJICAgIGZwdXRzKGlidWYsIHJm cCk7Ci0rCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZID0gIiw2KSkKLSsJCXsKLSsJCWFr ZXlzej02NDsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7Ci0rCQlpZiAo bGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkg ICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1ZSgiS0VZIiwg YUtleSwgbGVuKTsKLSsJCSsrc3RlcDsKLSsJCX0KLSsJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21w KGlidWYsIktFWXMgPSAiLDcpKQotKwkJewotKwkJYWtleXN6PTY0KjM7Ci0rCQlsZW49aGV4MmJp bihpYnVmKzcsYUtleSk7Ci0rCQlpZihsZW4gIT0gOCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRm KCJJbnZhbGlkIEtFWVxuIik7Ci0rCQkgICAgZXJyPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAg fQotKwkJbWVtY3B5KGFLZXkrOCxhS2V5LDgpOwotKwkJbWVtY3B5KGFLZXkrMTYsYUtleSw4KTsK LSsJCWlidWZbNF09J1wwJzsKLSsJCVByaW50VmFsdWUoIktFWXMiLGFLZXksbGVuKTsKLSsJCSsr c3RlcDsKLSsJCX0KLSsJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWSIsMykpCi0r CQl7Ci0rCQlpbnQgbj1pYnVmWzNdLScxJzsKLSsKLSsJCWFrZXlzej02NCozOwotKwkJbGVuPWhl eDJiaW4oaWJ1Zis3LGFLZXkrbio4KTsKLSsJCWlmKGxlbiAhPSA4KQotKwkJICAgIHsKLSsJCSAg ICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnI9MTsKLSsJCSAgICBicmVhazsK LSsJCSAgICB9Ci0rCQlpYnVmWzRdPSdcMCc7Ci0rCQlQcmludFZhbHVlKGlidWYsYUtleSxsZW4p OwotKwkJaWYobiA9PSAyKQotKwkJICAgICsrc3RlcDsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsK LSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGJy ZWFrOwotKwotKwljYXNlIDM6IC8qIElWID0geHh4eCAqLwotKwkgICAgZnB1dHMoaWJ1ZiwgcmZw KTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAiLCA1KSAhPSAwKQotKwkJewot KwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNl Ci0rCQl7Ci0rCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUsIGlWZWMpOwotKwkJaWYgKGxl biA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBJVlxuIik7Ci0rCQkgICAg ZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCVByaW50VmFsdWUoIklWIiwgaVZl YywgbGVuKTsKLSsJCXN0ZXAgPSAoZGlyKT8gNDogNTsKLSsJCX0KLSsJICAgIGJyZWFrOwotKwot KwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7 Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQot KwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7Ci0rCQllcnIgPSAxOwotKwkJ fQotKwkgICAgZWxzZQotKwkJewotKwkJaW50IG5uID0gc3RybGVuKGlidWYrMTIpOwotKwkJaWYo IXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQotKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEs cGxhaW50ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRl eHQpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkgICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBQ TEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwot KwkJICAgIH0KLSsJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4dCkpCi0rCQkgICAgewotKwkJ ICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVl KCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4pOwotKwkJaWYgKHN0 cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KLSsJCSAg ICB7Ci0rCQkgICAgZG9fbWN0KGFtb2RlLGFrZXlzeixudW1rZXlzLGFLZXksaVZlYyxkaXIscGxh aW50ZXh0LGxlbixyZnApOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgYXNz ZXJ0KGRpciA9PSAxKTsKLSsJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3os IGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAq LwotKwkJCQkgIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1 ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJD RkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0r CWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7 Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkK LSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJ ICAgIGVsc2UKLSsJCXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49 YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKLSsJCWVsc2UK LSsJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7Ci0rCQlpZiAobGVuIDwg MCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOwotKwkJ ICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQkKLSsJCVByaW50VmFsdWUo IkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1v bnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRlc3QgKi8KLSsJCSAgICB7Ci0rCQkgICAgZG9f bWN0KGFtb2RlLCBha2V5c3osIG51bWtleXMsIGFLZXksIGlWZWMsIAotKwkJCSAgIGRpciwgY2lw aGVydGV4dCwgbGVuLCByZnApOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAg YXNzZXJ0KGRpciA9PSAwKTsKLSsJCSAgICByZXQgPSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5 c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlw dCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRW YWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZwLAotKwkJ CQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQot KwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJICAgIGlmIChpYnVmWzBdICE9ICdcbicpCi0r CQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIpOwotKwkJ fQotKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKLSsJCXsgLyogTUNU IGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KLSsJCWZwdXRzKGlidWYsIHJmcCk7Ci0r CQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJICAgIGJyZWFrOwotKwkgICAgfQotKwl9Ci0rICAgIGlm IChyZnApCi0rCWZjbG9zZShyZnApOwotKyAgICBpZiAoYWZwKQotKwlmY2xvc2UoYWZwKTsKLSsg ICAgcmV0dXJuIGVycjsKLSsgICAgfQotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmls ZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxl LgotKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0IC1mIHh4 eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVzX3Rlc3Qg LWQgeHh4eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAotKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQi LCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUgKmZwID0gTlVMTDsKLSsgICAgY2hhciBmblsy NTBdID0gIiIsIHJmblsyNTZdID0gIiI7Ci0rICAgIGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsK LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwl7 Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlFWElUKDEpOwotKwl9Ci0rI2VuZGlmCi0rICAgIGlm IChhcmdjID4gMSkKLSsJewotKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQot KwkgICAgewotKwkgICAgZF9vcHQgPSAxOwotKwkgICAgfQotKwllbHNlIGlmIChzdHJjYXNlY21w KGFyZ3ZbMV0sICItZiIpID09IDApCi0rCSAgICB7Ci0rCSAgICBmX29wdCA9IDE7Ci0rCSAgICBk X29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHByaW50ZigiSW52YWxp ZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQot KwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVy XG4iKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoZF9vcHQpCi0rCSAgICBycWxp c3QgPSBhcmd2WzJdOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0p OwotKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYgKGRfb3B0 KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KLSsJaWYgKCEoZnAgPSBmb3Bl bihycWxpc3QsICJyIikpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEg bGlzdCBmaWxlXG4iKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsJd2hpbGUgKGZnZXRz KGZuLCBzaXplb2YoZm4pLCBmcCkpCi0rCSAgICB7Ci0rCSAgICBzdHJ0b2soZm4sICJcclxuIik7 Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7Ci0rCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4i LCByZm4pOwotKwkgICAgaWYgKHByb2NfZmlsZShyZm4sIHJzcGZpbGUpKQotKwkJewotKwkJcHJp bnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9yOiAlcyA8PDxcbiIsIHJmbik7Ci0rCQlFWElU KDEpOwotKwkJfQotKwkgICAgfQotKwlmY2xvc2UoZnApOwotKwl9Ci0rICAgIGVsc2UgLyogc2lu Z2xlIGZpbGUgKi8KLSsJewotKwlpZiAoVkVSQk9TRSkKLSsJCXByaW50ZigiUHJvY2Vzc2luZzog JXNcbiIsIGZuKTsKLSsJaWYgKHByb2NfZmlsZShmbiwgcnNwZmlsZSkpCi0rCSAgICB7Ci0rCSAg ICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgZm4pOwotKwkg ICAgfQotKwl9Ci0rICAgIEVYSVQoMCk7Ci0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2Vu ZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19k c3N2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNz dnMuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3Zz LmMuZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxMC0wMi0xNiAyMjo1 ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNTM3IEBACi0rI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxz dGRpby5oPgotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSt7Ci0rICAgIHBy aW50ZigiTm8gRklQUyBEU0Egc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rI2Vs c2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1 ZGUgPGN0eXBlLmg+Ci0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIHZvaWQg cGJuKGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsKLSsJ dW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOwotKwl0bXAgPSBP UEVOU1NMX21hbGxvYyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJy LCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwlCTl9i bjJiaW4oYm4sIHRtcCk7Ci0rCXByaW50ZigiJXMgPSAiLCBuYW1lKTsKLSsJZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKQotKwkJcHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKLSsJZnB1dHMoIlxuIiwg c3Rkb3V0KTsKLSsJT1BFTlNTTF9mcmVlKHRtcCk7Ci0rCXJldHVybjsKLSsJfQotKwotK3ZvaWQg cHJpbWVzKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0MF07Ci0rICAgIGNoYXIgbGJ1Zlsx MDI0MF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsKLSsgICAgd2hpbGUoZmdldHMo YnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91dCk7 Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29u dGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiUHJpbWUiKSkKLSsJICAgIHsKLSsJICAgIEJJ R05VTSAqcHA7Ci0rCi0rCSAgICBwcD1CTl9uZXcoKTsKLSsJICAgIGRvX2hleDJibigmcHAsdmFs dWUpOwotKwkgICAgcHJpbnRmKCJyZXN1bHQ9ICVjXG4iLAotKwkJICAgQk5faXNfcHJpbWVfZXgo cHAsMjAsTlVMTCxOVUxMKSA/ICdQJyA6ICdGJyk7Ci0rCSAgICB9CSAgICAKLSsJfQotKyAgICB9 Ci0rCi0rdm9pZCBwcWcoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFy IGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgaW50IG5tb2Q9 MDsKLSsKLSsgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0r CXsKLSsJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7 Ci0rCQlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21w KGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJOIikpCi0rCSAgICB7Ci0rCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsK LSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwotKwkgICAgd2hpbGUobi0t KQotKwkJewotKwkJdW5zaWduZWQgY2hhciBzZWVkWzIwXTsKLSsJCURTQSAqZHNhOwotKwkJaW50 IGNvdW50ZXI7Ci0rCQl1bnNpZ25lZCBsb25nIGg7Ci0rCQlkc2EgPSBGSVBTX2RzYV9uZXcoKTsK LSsKLSsJCWlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQsMCwm Y291bnRlciwmaCxOVUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhp dCgxKTsKLSsJCQl9Ci0rCQlwYm4oIlAiLGRzYS0+cCk7Ci0rCQlwYm4oIlEiLGRzYS0+cSk7Ci0r CQlwYm4oIkciLGRzYS0+Zyk7Ci0rCQlwdigiU2VlZCIsc2VlZCwyMCk7Ci0rCQlwcmludGYoImMg PSAlZFxuIixjb3VudGVyKTsKLSsJCXByaW50ZigiSCA9ICVseFxuIixoKTsKLSsJCXB1dGMoJ1xu JyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwllbHNlCi0rCSAgICBmcHV0cyhidWYsc3Rkb3V0 KTsKLSsJfQotKyAgICB9Ci0rCi0rdm9pZCBwcWd2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVm WzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7Ci0rICAgIGlu dCBjb3VudGVyLCBjb3VudGVyMjsKLSsgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKLSsgICAgRFNB ICpkc2E9TlVMTDsKLSsgICAgaW50IG5tb2Q9MDsKLSsgICAgdW5zaWduZWQgY2hhciBzZWVkWzEw MjRdOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkK LSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJ CXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWZwdXRzKGJ1 Ziwgc3Rkb3V0KTsKLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0 b2kodmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQotKwkgICAgcD1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgcT1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQotKwkgICAgZz1oZXgy Ym4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQotKwkgICAgewot KwkgICAgaW50IHNsZW4gPSBoZXgyYmluKHZhbHVlLCBzZWVkKTsKLSsJICAgIGlmIChzbGVuICE9 IDIwKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJvclxu Iik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsImMiKSkKLSsJICAgIGNvdW50ZXIgPWF0b2koYnVmKzQpOwotKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiSCIpKQotKwkgICAgewotKwkgICAgaCA9IGF0b2kodmFsdWUpOwotKwkgICAgaWYg KCFwIHx8ICFxIHx8ICFnKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJvclxu Iik7Ci0rCQlleGl0ICgxKTsKLSsJCX0KLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAsJmNv dW50ZXIyLCZoMixOVUxMKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQkJZXhp dCgxKTsKLSsJCQl9Ci0rICAgICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJOX2Nt cChkc2EtPnEsIHEpIHx8IEJOX2NtcChkc2EtPmcsIGcpCi0rCQl8fCAoY291bnRlciAhPSBjb3Vu dGVyMikgfHwgKGggIT0gaDIpKQotKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAg ICBlbHNlCi0rCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJICAgIEJOX2ZyZWUocCk7 Ci0rCSAgICBCTl9mcmVlKHEpOwotKwkgICAgQk5fZnJlZShnKTsKLSsJICAgIHAgPSBOVUxMOwot KwkgICAgcSA9IE5VTEw7Ci0rCSAgICBnID0gTlVMTDsKLSsJICAgIEZJUFNfZHNhX2ZyZWUoZHNh KTsKLSsJICAgIGRzYSA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotKy8qIEtleXBh aXIgdmVyaWZpY2F0aW9uIHJvdXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0YW5k YXJkIEZJUFMxNDAtMgotKyAqIGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25hbCB0 ZXN0IHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiB0aGUKLSsgKiBvdXRwdXQgb2YgdGhlIEtl eVBhaXIgdGVzdC4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBubW9k LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwgQklHTlVNICpnLAotKwkJCQkJCQlCTl9DVFggKmN0eCkK LSsgICAgewotKyAgICBCSUdOVU0gKnJlbSA9IE5VTEw7Ci0rICAgIGlmIChCTl9udW1fYml0cyhw KSAhPSBubW9kKQotKwlyZXR1cm4gMDsKLSsgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2MCkK LSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVja3Ms IGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmIChCTl9pc19wcmltZV9leChx LCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKLSsJcmV0dXJuIDA7Ci0rICAgIHJl bSA9IEJOX25ldygpOwotKyAgICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJOX2lz X29uZShyZW0pCi0rICAgIAl8fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQotKwl8 fCAhQk5fbW9kX2V4cChyZW0sIGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQotKwl7 Ci0rCUJOX2ZyZWUocmVtKTsKLSsJcmV0dXJuIDA7Ci0rCX0KLSsgICAgLyogVG9kbzogY2hlY2sg ZyAqLwotKyAgICBCTl9mcmVlKHJlbSk7Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rdm9p ZCBrZXl2ZXIoKQotKyAgICB7Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZb MTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgQklHTlVNICpwID0gTlVM TCwgKnEgPSBOVUxMLCAqZyA9IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOwotKyAgICBCSUdO VU0gKlkyOwotKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0rICAgIGludCBubW9kPTAsIHBhcmFt Y2hlY2sgPSAwOwotKwotKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7Ci0rICAgIFkyID0gQk5fbmV3 KCk7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQot Kwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJ ewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNt cChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBpZiAocCkKLSsJCUJOX2ZyZWUocCk7 Ci0rCSAgICBwID0gTlVMTDsKLSsJICAgIGlmIChxKQotKwkJQk5fZnJlZShxKTsKLSsJICAgIHEg PSBOVUxMOwotKwkgICAgaWYgKGcpCi0rCQlCTl9mcmVlKGcpOwotKwkgICAgZyA9IE5VTEw7Ci0r CSAgICBwYXJhbWNoZWNrID0gMDsKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCSAgICB9Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJYIikpCi0rCSAgICBYPWhleDJibih2YWx1ZSk7Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCi0rCSAgICB7Ci0rCSAgICBZPWhleDJibih2 YWx1ZSk7Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJfQotKwkg ICAgcGJuKCJQIixwKTsKLSsJICAgIHBibigiUSIscSk7Ci0rCSAgICBwYm4oIkciLGcpOwotKwkg ICAgcGJuKCJYIixYKTsKLSsJICAgIHBibigiWSIsWSk7Ci0rCSAgICBpZiAoIXBhcmFtY2hlY2sp Ci0rCQl7Ci0rCQlpZiAoZHNzX3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKLSsJCQlw YXJhbWNoZWNrID0gMTsKLSsJCWVsc2UKLSsJCQlwYXJhbWNoZWNrID0gLTE7Ci0rCQl9Ci0rCSAg ICBpZiAocGFyYW1jaGVjayAhPSAxKQotKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJ ICAgIGVsc2UKLSsJCXsKLSsJCWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8fCBC Tl9jbXAoWTIsIFkpKQotKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgICAg IGVsc2UKLSsJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKLSsJCX0KLSsJICAgIEJOX2Zy ZWUoWCk7Ci0rCSAgICBCTl9mcmVlKFkpOwotKwkgICAgWCA9IE5VTEw7Ci0rCSAgICBZID0gTlVM TDsKLSsJICAgIH0KLSsJfQotKwlpZiAocCkKLSsJICAgIEJOX2ZyZWUocCk7Ci0rCWlmIChxKQot KwkgICAgQk5fZnJlZShxKTsKLSsJaWYgKGcpCi0rCSAgICBCTl9mcmVlKGcpOwotKwlpZiAoWTIp Ci0rCSAgICBCTl9mcmVlKFkyKTsKLSsgICAgfQotKwotK3ZvaWQga2V5cGFpcigpCi0rICAgIHsK LSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAq a2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0cyhi dWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtl eXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwot KwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAg bm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJICAg IHsKLSsJICAgIERTQSAqZHNhOwotKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7Ci0rCi0rCSAgICBw cmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygp OwotKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCww LE5VTEwsTlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgx KTsKLSsJCX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsK LSsJICAgIHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwotKwkg ICAgd2hpbGUobi0tKQotKwkJewotKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCi0rCQkJ ewotKwkJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJCWV4aXQoMSk7Ci0rCQkJfQotKwotKwkJcGJu KCJYIixkc2EtPnByaXZfa2V5KTsKLSsJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKLSsJCXB1dGMo J1xuJyxzdGRvdXQpOwotKwkJfQotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ2dl bigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsK LSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKyAgICBEU0Eg KmRzYT1OVUxMOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0g TlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVm KSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlm KCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVl KTsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOwotKwkgICAgaWYgKGRzYSkK LSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwotKwkg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5VTEws TlVMTCxOVUxMKSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJ CX0KLSsJICAgIHBibigiUCIsZHNhLT5wKTsKLSsJICAgIHBibigiUSIsZHNhLT5xKTsKLSsJICAg IHBibigiRyIsZHNhLT5nKTsKLSsJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgfQotKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25lZCBj aGFyIG1zZ1sxMDI0XTsKLSsJICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07Ci0rCSAgICB1bnNp Z25lZCBpbnQgc2xlbjsKLSsJICAgIGludCBuOwotKwkgICAgRVZQX1BLRVkgcGs7Ci0rCSAgICBF VlBfTURfQ1RYIG1jdHg7Ci0rCSAgICBEU0FfU0lHICpzaWc7Ci0rCSAgICBFVlBfTURfQ1RYX2lu aXQoJm1jdHgpOwotKwotKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBwdigiTXNn Iixtc2csbik7Ci0rCi0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCXsKLSsJ CWRvX3ByaW50X2Vycm9ycygpOwotKwkJZXhpdCgxKTsKLSsJCX0KLSsJICAgIHBrLnR5cGUgPSBF VlBfUEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsJICAgIHBibigiWSIsZHNh LT5wdWJfa2V5KTsKLSsKLSsJICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwg TlVMTCk7Ci0rCSAgICBFVlBfU2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKLSsJICAgIEVWUF9T aWduRmluYWwoJm1jdHgsIHNidWYsICZzbGVuLCAmcGspOwotKwotKwkgICAgc2lnID0gRFNBX1NJ R19uZXcoKTsKLSsJICAgIEZJUFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsKLSsK LSsJICAgIHBibigiUiIsc2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsKLSsJICAgIHB1 dGMoJ1xuJyxzdGRvdXQpOwotKwkgICAgRFNBX1NJR19mcmVlKHNpZyk7Ci0rCSAgICBFVlBfTURf Q1RYX2NsZWFudXAoJm1jdHgpOwotKwkgICAgfQotKwl9Ci0rCWlmIChkc2EpCi0rCQlGSVBTX2Rz YV9mcmVlKGRzYSk7Ci0rICAgIH0KLSsKLSt2b2lkIHNpZ3ZlcigpCi0rICAgIHsKLSsgICAgRFNB ICpkc2E9TlVMTDsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsK LSsgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1 ZTsKLSsgICAgaW50IG5tb2Q9MCwgbj0wOwotKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNnOwot KwotKyAgICBzaWctPnIgPSBOVUxMOwotKyAgICBzaWctPnMgPSBOVUxMOwotKwotKyAgICB3aGls ZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNl X2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1Zixz dGRvdXQpOwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIp KQotKwkgICAgewotKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIGlmKGRzYSkKLSsJCUZJ UFNfZHNhX2ZyZWUoZHNhKTsKLSsJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKLSsJICAgIH0KLSsJ ZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKLSsJICAgIGRzYS0+cD1oZXgyYm4odmFsdWUp OwotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQotKwkgICAgZHNhLT5xPWhleDJibih2 YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICB7Ci0rCSAgICBk c2EtPmc9aGV4MmJuKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5t b2QpOwotKwkgICAgcGJuKCJQIixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkg ICAgcGJuKCJHIixkc2EtPmcpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0r CWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIG49aGV4MmJp bih2YWx1ZSxtc2cpOwotKwkgICAgcHYoIk1zZyIsbXNnLG4pOwotKwkgICAgfQotKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiWSIpKQotKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1ZSk7 Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJSIikpCi0rCSAgICBzaWctPnI9aGV4MmJuKHZh bHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlMiKSkKLSsJICAgIHsKLSsJICAgIEVW UF9NRF9DVFggbWN0eDsKLSsJICAgIEVWUF9QS0VZIHBrOwotKwkgICAgdW5zaWduZWQgY2hhciBz aWdidWZbNjBdOwotKwkgICAgdW5zaWduZWQgaW50IHNsZW47Ci0rCSAgICBpbnQgcjsKLSsJICAg IEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNBOwot KwkgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsKLSsJ Ci0rCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7Ci0rCSAgICBwYm4oIlIiLHNpZy0+cik7Ci0r CSAgICBwYm4oIlMiLHNpZy0+cyk7Ci0rCi0rCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2VuY29k ZShzaWdidWYsIHNpZyk7Ci0rCSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEo KSwgTlVMTCk7Ci0rCSAgICBFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkgICAg ciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOwotKwkgICAgRVZQ X01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJCi0rCSAgICBwcmludGYoIlJlc3VsdCA9ICVjXG4i LCByID09IDEgPyAnUCcgOiAnRicpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9 Ci0rCX0KLSsgICAgfQotKwotK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQotKyAgICB7 Ci0rICAgIGlmKGFyZ2MgIT0gMikKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1lfHBx Z3xwcWd2ZXJ8a2V5cGFpcnxzaWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsK LSsJfQotKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMo KTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikpCi0r CXByaW1lcygpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCi0rCXBxZygp OwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFndmVyIikpCi0rCXBxZ3ZlcigpOwot KyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5cGFpciIpKQotKwlrZXlwYWlyKCk7Ci0r ICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXl2ZXIiKSkKLSsJa2V5dmVyKCk7Ci0rICAg IGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWdnZW4iKSkKLSsJc2lnZ2VuKCk7Ci0rICAgIGVs c2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWd2ZXIiKSkKLSsJc2lndmVyKCk7Ci0rICAgIGVsc2UK LSsJewotKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0p OwotKwlleGl0KDEpOwotKwl9Ci0rCi0rICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2 cy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMu YwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMu ZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMJMjAxMC0wMi0xNiAyMjo1ODoz MS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMjMwIEBACi0rLyoKLSsgKiBDcnVkZSB0ZXN0 IGRyaXZlciBmb3IgcHJvY2Vzc2luZyB0aGUgVlNUIGFuZCBNQ1QgdGVzdHZlY3RvciBmaWxlcwot KyAqIGdlbmVyYXRlZCBieSB0aGUgQ01WUCBSTkdWUyBwcm9kdWN0LgotKyAqCi0rICogTm90ZSB0 aGUgaW5wdXQgZmlsZXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSBhIF92ZXJ5XyBzcGVjaWZpYyBmb3Jt YXQKLSsgKiBhcyBkZXNjcmliZWQgaW4gdGhlIE5JU1QgZG9jdW1lbnQgIlRoZSBSYW5kb20gTnVt YmVyIEdlbmVyYXRvcgotKyAqIFZhbGlkYXRpb24gU3lzdGVtIChSTkdWUykiLCBNYXkgMjUsIDIw MDQuCi0rICoKLSsgKi8KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJORyBzdXBwb3J0 XG4iKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wv Ym4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1 MDl2My5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsj aW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSt2b2lkIHZzdCgpCi0rICAgIHsKLSsgICAgdW5zaWdu ZWQgY2hhciAqa2V5ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7Ci0rICAg IHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOwot KyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICpr ZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGxvbmcgaSwga2V5bGVuOwotKwotKyAgICBrZXlsZW4gPSAw OwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJ ewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXld IiwgMTMpKQotKwkJa2V5bGVuID0gMTY7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5 Mi1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMjQ7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJb QUVTIDI1Ni1LZXldIiwgMTMpKQotKwkJa2V5bGVuID0gMzI7Ci0rCWlmICghcGFyc2VfbGluZSgm a2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJY29udGludWU7Ci0rCWlmKCFzdHJjbXAo a2V5d29yZCwiS2V5IikpCi0rCSAgICB7Ci0rCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsK LSsJICAgIGlmIChpICE9IGtleWxlbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxp ZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4pOwotKwkJcmV0dXJuOwotKwkJ fQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKLSsJICAgIHsKLSsJ ICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJ fQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQotKwkgICAgewotKwkg ICAgdj1oZXgyYmluX20odmFsdWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQot KwotKwkgICAgaWYgKCFrZXkgfHwgIWR0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNaXNz aW5nIGtleSBvciBEVFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBGSVBTX3JhbmRf c2V0X2tleShrZXksIGtleWxlbik7Ci0rCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2KTsKLSsJICAg IEZJUFNfcmFuZF9zZXRfZHQoZHQpOwotKwkgICAgaWYgKEZJUFNfcmFuZF9ieXRlcyhyZXQsMTYp IDw9IDApCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1 ZVxuIik7Ci0rCSAgICAgICAgcmV0dXJuOwotKwkgICAgICAgIH0KLSsKLSsJICAgIHB2KCJSIixy ZXQsMTYpOwotKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7Ci0rCSAgICBrZXkgPSBOVUxMOwotKwkg ICAgT1BFTlNTTF9mcmVlKGR0KTsKLSsJICAgIGR0ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJl ZSh2KTsKLSsJICAgIHYgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIG1j dCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsKLSsgICAgdW5zaWdu ZWQgY2hhciAqdiA9IE5VTEw7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKLSsgICAg dW5zaWduZWQgY2hhciByZXRbMTZdOwotKyAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBs YnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAgIGxvbmcgaSwga2V5 bGVuOwotKyAgICBpbnQgajsKLSsKLSsgICAga2V5bGVuID0gMDsKLSsKLSsgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJZnB1dHMoYnVmLHN0ZG91 dCk7Ci0rCWlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkKLSsJCWtleWxlbiA9 IDE2OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkKLSsJCWtl eWxlbiA9IDI0OwotKwllbHNlIGlmKCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIsIDEzKSkK LSsJCWtleWxlbiA9IDMyOwotKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1 ZiwgYnVmKSkKLSsJCWNvbnRpbnVlOwotKwlpZighc3RyY21wKGtleXdvcmQsIktleSIpKQotKwkg ICAgewotKwkgICAga2V5PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSBrZXls ZW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwgZXhwZWN0 aW5nICVsZFxuIiwga2V5bGVuKTsKLSsJCXJldHVybjsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIkRUIikpCi0rCSAgICB7Ci0rCSAgICBkdD1oZXgyYmluX20odmFs dWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIklu dmFsaWQgRFQgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsJICAgIH0KLSsJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIlYiKSkKLSsJICAgIHsKLSsJICAgIHY9aGV4MmJpbl9tKHZhbHVl LCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZh bGlkIFYgbGVuZ3RoXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsKLSsJICAgIGlmICgha2V5IHx8 ICFkdCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRcbiIpOwot KwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgRklQU19yYW5kX3NldF9rZXkoa2V5LCBrZXlsZW4p OwotKwkgICAgRklQU19yYW5kX3NlZWQodiwxNik7Ci0rCSAgICBmb3IgKGkgPSAwOyBpIDwgMTAw MDA7IGkrKykKLSsJCXsKLSsJCSAgICBGSVBTX3JhbmRfc2V0X2R0KGR0KTsKLSsJCSAgICBpZiAo RklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKLSsJCQl7Ci0rCQkJZnByaW50ZihzdGRlcnIs ICJFcnJvciBnZXR0aW5nIFBSTkcgdmFsdWVcbiIpOwotKwkJICAgICAgICByZXR1cm47Ci0rCQkg ICAgICAgIH0KLSsJCSAgICAvKiBJbmNyZW1lbnQgRFQgKi8KLSsJCSAgICBmb3IgKGogPSAxNTsg aiA+PSAwOyBqLS0pCi0rCQkJewotKwkJCWR0W2pdKys7Ci0rCQkJaWYgKGR0W2pdKQotKwkJCQli cmVhazsKLSsJCQl9Ci0rCQl9Ci0rCi0rCSAgICBwdigiUiIscmV0LDE2KTsKLSsJICAgIE9QRU5T U0xfZnJlZShrZXkpOwotKwkgICAga2V5ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJlZShkdCk7 Ci0rCSAgICBkdCA9IE5VTEw7Ci0rCSAgICBPUEVOU1NMX2ZyZWUodik7Ci0rCSAgICB2ID0gTlVM TDsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFy Z3YpCi0rICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCIl cyBbbWN0fHZzdF1cbiIsYXJndlswXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIUZJUFNf bW9kZV9zZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCWV4aXQoMSk7Ci0rCX0K LSsgICAgRklQU19yYW5kX3Jlc2V0KCk7Ci0rICAgIGlmICghRklQU19yYW5kX3Rlc3RfbW9kZSgp KQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCAiRXJyb3Igc2V0dGluZyBQUk5HIHRlc3QgbW9kZVxu Iik7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFzdHJj bXAoYXJndlsxXSwibWN0IikpCi0rCW1jdCgpOwotKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsx XSwidnN0IikpCi0rCXZzdCgpOwotKyAgICBlbHNlCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsIkRv bid0IGtub3cgaG93IHRvICVzLlxuIixhcmd2WzFdKTsKLSsJZXhpdCgxKTsKLSsJfQotKwotKyAg ICByZXR1cm4gMDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZpcHMJMjAxMC0wMi0xNiAyMjo1 ODozMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBz L2NhdnMvZmlwc19yc2FndGVzdC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAw Ci1AQCAtMCwwICsxLDM5MCBAQAotKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLwotKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMjAwNSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk 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 PT09PQotKyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpo QGNyeXB0c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2lu Y2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Jpby5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ht YWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2Eu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5o PgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9ydFxuIik7Ci0rICAg IHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsK LStpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Ci0rc3RhdGljIGludCByc2FfcHJp bnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIs IEJJR05VTSAqWHAsCi0rCQlCSUdOVU0gKmUpOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihG SUxFICpvdXQsIFJTQSAqcnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0g KlhxKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAq aW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0rCi0rCWlmKCFGSVBT X21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsK LSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWlu ID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rk b3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWlu KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBl cnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGluKSkKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4i KTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0r Ci0rCWlmIChyZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAh PSBzdGRpbikpCi0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkK LSsJCWZjbG9zZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBS U0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklM RSAqaW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIg KmtleXdvcmQsICp2YWx1ZTsKLSsJUlNBICpyc2EgPSBOVUxMOwotKwlCSUdOVU0gKlhwMSA9IE5V TEwsICpYcDIgPSBOVUxMLCAqWHAgPSBOVUxMOwotKwlCSUdOVU0gKlhxMSA9IE5VTEwsICpYcTIg PSBOVUxMLCAqWHEgPSBOVUxMOwotKwlCSUdOVU0gKmUgPSBOVUxMOwotKwlpbnQgcmV0ID0gMDsK LSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNU X01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElO RUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9yOwot KwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVMRU4sIGluKSkKLSsJ CXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlrZXl3b3Jk ID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJCS8qIExv b2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwotKwkJLyog SWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGluZSkganVzdCBjb3B5 ICovCi0rCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKLSsJCQl7Ci0rCQkJaWYgKGZwdXRzKG9s aW5lYnVmLCBvdXQpIDwgMCkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQljb250aW51ZTsKLSsJCQl9 Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJ CXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkqcS0tID0gMDsKLSsKLSsJ CSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1vdmUgbGVhZGluZyBzcGFj ZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUp KQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgZnJvbSB2YWx1 ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCQl3aGlsZSAoKnAg PT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsK LSsJCWlmICghc3RyY21wKGtleXdvcmQsICJ4cDEiKSkKLSsJCQl7Ci0rCQkJaWYgKFhwMSB8fCAh ZG9faGV4MmJuKCZYcDEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQotKwkJCXsKLSsJCQlpZiAoWHAyIHx8 ICFkb19oZXgyYm4oJlhwMix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQot KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkKLSsJCQl7Ci0rCQkJaWYgKFhwIHx8 ICFkb19oZXgyYm4oJlhwLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0r CQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkKLSsJCQl7Ci0rCQkJaWYgKFhxMSB8 fCAhZG9faGV4MmJuKCZYcTEsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0K LSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIpKQotKwkJCXsKLSsJCQlpZiAoWHEy IHx8ICFkb19oZXgyYm4oJlhxMix2YWx1ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJ fQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEiKSkKLSsJCQl7Ci0rCQkJaWYgKFhx IHx8ICFkb19oZXgyYm4oJlhxLHZhbHVlKSkKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCi0rCQkJewotKwkJCWlmIChlIHx8 ICFkb19oZXgyYm4oJmUsdmFsdWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAxIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNl IGlmICghc3RyY21wKGtleXdvcmQsICJwMiIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAicCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZSBpZiAoIXN0cmNt cChrZXl3b3JkLCAicTEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgInEyIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJxIikpCi0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJuIikp Ci0rCQkJY29udGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJkIikpCi0rCQkJ Y29udGludWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9s aW5lYnVmLCBvdXQpOwotKwotKwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBYcCkKLSsJCQl7Ci0r CQkJcnNhID0gRklQU19yc2FfbmV3KCk7Ci0rCQkJaWYgKCFyc2EpCi0rCQkJCWdvdG8gZXJyb3I7 Ci0rCQkJaWYgKCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwgWHAsIGUpKQotKwkJ CQlnb3RvIGVycm9yOwotKwkJCUJOX2ZyZWUoWHAxKTsKLSsJCQlYcDEgPSBOVUxMOwotKwkJCUJO X2ZyZWUoWHAyKTsKLSsJCQlYcDIgPSBOVUxMOwotKwkJCUJOX2ZyZWUoWHApOwotKwkJCVhwID0g TlVMTDsKLSsJCQlCTl9mcmVlKGUpOwotKwkJCWUgPSBOVUxMOwotKwkJCX0KLSsKLSsJCWlmIChy c2EgJiYgWHExICYmIFhxMiAmJiBYcSkKLSsJCQl7Ci0rCQkJaWYgKCFyc2FfcHJpbnRrZXkyKG91 dCwgcnNhLCBYcTEsIFhxMiwgWHEpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCUJOX2ZyZWUoWHEx KTsKLSsJCQlYcTEgPSBOVUxMOwotKwkJCUJOX2ZyZWUoWHEyKTsKLSsJCQlYcTIgPSBOVUxMOwot KwkJCUJOX2ZyZWUoWHEpOwotKwkJCVhxID0gTlVMTDsKLSsJCQlGSVBTX3JzYV9mcmVlKHJzYSk7 Ci0rCQkJcnNhID0gTlVMTDsKLSsJCQl9Ci0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9y OgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAo bGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsKLSsJaWYgKFhwMSkKLSsJCUJO X2ZyZWUoWHAxKTsKLSsJaWYgKFhwMikKLSsJCUJOX2ZyZWUoWHAyKTsKLSsJaWYgKFhwKQotKwkJ Qk5fZnJlZShYcCk7Ci0rCWlmIChYcTEpCi0rCQlCTl9mcmVlKFhxMSk7Ci0rCWlmIChYcTEpCi0r CQlCTl9mcmVlKFhxMSk7Ci0rCWlmIChYcTIpCi0rCQlCTl9mcmVlKFhxMik7Ci0rCWlmIChYcSkK LSsJCUJOX2ZyZWUoWHEpOwotKwlpZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0rCWlmIChyc2EpCi0r CQlGSVBTX3JzYV9mcmVlKHJzYSk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9y OgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGlu ZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50 IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHAxLCBCSUdO VU0gKlhwMiwgQklHTlVNICpYcCwKLSsJCUJJR05VTSAqZSkKLSsJewotKwlpbnQgcmV0ID0gMDsK LSsJQklHTlVNICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7Ci0rCXAxID0gQk5fbmV3KCk7Ci0rCXAy ID0gQk5fbmV3KCk7Ci0rCWlmICghcDEgfHwgIXAyKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYg KCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEwsIFhwMSwgWHAyLCBY cCwKLSsJCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0r Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7Ci0rCWRvX2JuX3ByaW50X25hbWUo b3V0LCAicDIiLCBwMik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIsIHJzYS0+cCk7Ci0r Ci0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocDEpCi0rCQlCTl9mcmVlKHAxKTsKLSsJ aWYgKHAyKQotKwkJQk5fZnJlZShwMik7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLStzdGF0 aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05VTSAqWHEx LCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsJQklHTlVN ICpxMSA9IE5VTEwsICpxMiA9IE5VTEw7Ci0rCXExID0gQk5fbmV3KCk7Ci0rCXEyID0gQk5fbmV3 KCk7Ci0rCWlmICghcTEgfHwgIXEyKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYgKCFSU0FfWDkz MV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5VTEwsIE5VTEwsCi0r CQkJCQkJWHExLCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWRv X2JuX3ByaW50X25hbWUob3V0LCAicTEiLCBxMSk7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAi cTIiLCBxMik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+cSk7Ci0rCWRvX2Ju X3ByaW50X25hbWUob3V0LCAibiIsIHJzYS0+bik7Ci0rCWRvX2JuX3ByaW50X25hbWUob3V0LCAi ZCIsIHJzYS0+ZCk7Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocTEpCi0rCQlC Tl9mcmVlKHExKTsKLSsJaWYgKHEyKQotKwkJQk5fZnJlZShxMik7Ci0rCi0rCXJldHVybiByZXQ7 Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Zp cHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9m aXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf cnNhc3Rlc3QuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCAr MSwzNzAgQEAKLSsvKiBmaXBzX3JzYXN0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBo ZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9q ZWN0IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3Bl blNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVy aWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku Ci0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lmbmRlZiBP UEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsg ICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30K LSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3N0YXRpYyBpbnQgcnNh X3N0ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKTsKLStzdGF0aWMgaW50IHJz YV9wcmludHNpZyhGSUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1 bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbik7Ci0rCi0raW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9 IE5VTEw7Ci0rCi0rCWludCByZXQgPSAxLCBTYWx0bGVuID0gLTE7Ci0rCi0rCWlmKCFGSVBTX21v ZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJ CX0KLSsKLSsJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkK LSsJCXsKLSsJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOwotKwkJaWYgKFNhbHRsZW4gPCAwKQot KwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4i KTsKLSsJCQlnb3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdjIC09IDI7Ci0rCQlhcmd2ICs9IDI7Ci0r CQl9Ci0rCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkK LSsJCXsKLSsJCVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2MtLTsKLSsJCWFyZ3YrKzsKLSsJCX0KLSsK LSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4o YXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwll bHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7 Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVu ZDsKLSsJCX0KLSsKLSsJaWYgKCFyc2Ffc3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCi0rCQl7Ci0r CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVNURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxu Iik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgot KwotKwlpZiAocmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4g IT0gc3RkaW4pKQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkp Ci0rCQlmY2xvc2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUg UlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBG SUxFICppbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAq cCwgKnE7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsJUlNBICpyc2EgPSBOVUxMOwotKwlj b25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOwotKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMOwot Kwlsb25nIE1zZ2xlbiA9IC0xOwotKwlpbnQga2V5bGVuID0gLTEsIGN1cnJlbnRfa2V5bGVuID0g LTE7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BF TlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21h bGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1 ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1Rf TUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9s aW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNl ICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5 d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVi dWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IGp1c3QgY29weSAqLwotKwkJaWYgKCFwKQotKwkJ CXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwot KwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0 cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQot KwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8q IFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0g MTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnAp KQotKwkJCSpwLS0gPSAwOwotKwotKwkJLyogTG9vayBmb3IgW21vZCA9IFhYWF0gZm9yIGtleSBs ZW5ndGggKi8KLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsICJbbW9kIikpCi0rCQkJewotKwkJ CXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwkJCWlmICgqcCAhPSAnXScpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJKnAgPSAwOwotKwkJCWtleWxlbiA9IGF0b2kodmFsdWUp OwotKwkJCWlmIChrZXlsZW4gPCAwKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQotKwkJCXsKLSsJCQlpZiAoIXN0 cmNtcCh2YWx1ZSwgIlNIQTEiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGExKCk7Ci0rCQkJZWxzZSBp ZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwot KwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKLSsJCQkJZGdzdCA9IEVWUF9z aGEyNTYoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCi0rCQkJCWRn c3QgPSBFVlBfc2hhMzg0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIp KQotKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigpOwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJp bnRmKHN0ZGVyciwKLSsJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxu IiwKLSsJCQkJCQkJCXZhbHVlKTsKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJ CX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAo TXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkK LSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2ds ZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsKLSsJ CWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwotKwkJLyogSWYga2V5IGxlbmd0aCBoYXMgY2hhbmdl ZCwgZ2VuZXJhdGUgYW5kIG91dHB1dCBwdWJsaWMKLSsJCSAqIGtleSBjb21wb25lbnRzIG9mIG5l dyBSU0EgcHJpdmF0ZSBrZXkuCi0rCQkgKi8KLSsKLSsJCWlmIChrZXlsZW4gIT0gY3VycmVudF9r ZXlsZW4pCi0rCQkJewotKwkJCUJJR05VTSAqYm5fZTsKLSsJCQlpZiAocnNhKQotKwkJCQlGSVBT X3JzYV9mcmVlKHJzYSk7Ci0rCQkJcnNhID0gRklQU19yc2FfbmV3KCk7Ci0rCQkJaWYgKCFyc2Ep Ci0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJYm5fZSA9IEJOX25ldygpOwotKwkJCWlmICghYm5fZSB8 fCAhQk5fc2V0X3dvcmQoYm5fZSwgMHgxMDAxKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAo IVJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChyc2EsIGtleWxlbiwgYm5fZSwgTlVMTCkpCi0rCQkJ CWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShibl9lKTsKLSsJCQlmcHV0cygibiA9ICIsIG91dCk7 Ci0rCQkJZG9fYm5fcHJpbnQob3V0LCByc2EtPm4pOwotKwkJCWZwdXRzKCJcbmUgPSAiLCBvdXQp OwotKwkJCWRvX2JuX3ByaW50KG91dCwgcnNhLT5lKTsKLSsJCQlmcHV0cygiXG4iLCBvdXQpOwot KwkJCWN1cnJlbnRfa2V5bGVuID0ga2V5bGVuOwotKwkJCX0KLSsKLSsJCWlmIChNc2cgJiYgZGdz dCkKLSsJCQl7Ci0rCQkJaWYgKCFyc2FfcHJpbnRzaWcob3V0LCByc2EsIGRnc3QsIE1zZywgTXNn bGVuLAotKwkJCQkJCQkJU2FsdGxlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9m cmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCXJldCA9IDE7 Ci0rCi0rCWVycm9yOgotKwotKwlpZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVi dWYpOwotKwlpZiAobGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKHJz YSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJcGFyc2Vf ZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2lu ZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsKLSsJfQotKwotK3N0YXRp YyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdz dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKQotKwl7 Ci0rCWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyICpzaWdidWYgPSBOVUxMOwotKwlpbnQg aSwgc2lnbGVuOwotKwkvKiBFVlBfUEtFWSBzdHJ1Y3R1cmUgKi8KLSsJRVZQX1BLRVkgcGs7Ci0r CUVWUF9NRF9DVFggY3R4OwotKwlway50eXBlID0gRVZQX1BLRVlfUlNBOwotKwlway5wa2V5LnJz YSA9IHJzYTsKLSsKLSsJc2lnbGVuID0gUlNBX3NpemUocnNhKTsKLSsJc2lnYnVmID0gT1BFTlNT TF9tYWxsb2Moc2lnbGVuKTsKLSsJaWYgKCFzaWdidWYpCi0rCQlnb3RvIGVycm9yOwotKwotKwlF VlBfTURfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rCWlmIChTYWx0bGVuID49IDApCi0rCQl7Ci0rCQlN X0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsCi0rCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1Mg fCAoU2FsdGxlbiA8PCAxNikpOwotKwkJfQotKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQotKwkJ TV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOwot KwlpZiAoIUVWUF9TaWduSW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCWlmICghRVZQX1NpZ25VcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQotKwkJZ290byBlcnJv cjsKLSsJaWYgKCFFVlBfU2lnbkZpbmFsKCZjdHgsIHNpZ2J1ZiwgKHVuc2lnbmVkIGludCAqKSZz aWdsZW4sICZwaykpCi0rCQlnb3RvIGVycm9yOwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0 eCk7Ci0rCi0rCWZwdXRzKCJTID0gIiwgb3V0KTsKLSsKLSsJZm9yIChpID0gMDsgaSA8IHNpZ2xl bjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJYIiwgc2lnYnVmW2ldKTsKLSsKLSsJZnB1dHMo IlxuIiwgb3V0KTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCXJldHVybiByZXQ7 Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JzYXZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBz L2NhdnMvZmlwc19yc2F2dGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh dnRlc3QuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwz NzcgQEAKLSsvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0 IDIwMDUuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0r ICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNT TC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMg WW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0r ICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rCi0rI2lmbmRlZiBPUEVO U1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAg cHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsK LSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK2ludCByc2FfdGVzdChGSUxF ICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Ci0rc3RhdGljIGludCByc2FfcHJpbnR2ZXIo RklMRSAqb3V0LAotKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCi0rCQljb25zdCBFVlBfTUQgKmRn c3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAotKwkJdW5zaWduZWQgY2hh ciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7Ci0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQotKwl7Ci0rCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7Ci0rCi0rCWlu dCByZXQgPSAxOwotKwlpbnQgU2FsdGxlbiA9IC0xOwotKwotKwlpZighRklQU19tb2RlX3NldCgx KSkKLSsJCXsKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCi0r CWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVuIiwgYXJndlsxXSkpCi0rCQl7Ci0r CQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKLSsJCWlmIChTYWx0bGVuIDwgMCkKLSsJCQl7Ci0r CQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBzYWx0IGxlbmd0aFxuIik7Ci0rCQkJ Z290byBlbmQ7Ci0rCQkJfQotKwkJYXJnYyAtPSAyOwotKwkJYXJndiArPSAyOwotKwkJfQotKwll bHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMxIiwgYXJndlsxXSkpCi0rCQl7Ci0r CQlTYWx0bGVuID0gLTI7Ci0rCQlhcmdjLS07Ci0rCQlhcmd2Kys7Ci0rCQl9Ci0rCi0rCWlmIChh cmdjID09IDEpCi0rCQlpbiA9IHN0ZGluOwotKwllbHNlCi0rCQlpbiA9IGZvcGVuKGFyZ3ZbMV0s ICJyIik7Ci0rCi0rCWlmIChhcmdjIDwgMikKLSsJCW91dCA9IHN0ZG91dDsKLSsJZWxzZQotKwkJ b3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKLSsKLSsJaWYgKCFpbikKLSsJCXsKLSsJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290 byBlbmQ7Ci0rCQl9Ci0rCi0rCWlmICghb3V0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJG QVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9 Ci0rCi0rCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQln b3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAo cmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4p KQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xv c2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgUlNBX1RFU1Rf TUFYTElORUxFTgkxMDI0MAotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBp bnQgU2FsdGxlbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJ Y2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwljb25zdCBFVlBfTUQgKmRnc3QgPSBOVUxMOwotKwlC SUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEws ICpTID0gTlVMTDsKLSsJbG9uZyBNc2dsZW4sIFNsZW47Ci0rCWludCByZXQgPSAwOwotKwlpbnQg bG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElO RUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsK LSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdo aWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJ bG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5l YnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5z aWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3Ig PSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9 IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJ CWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJCXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYs IG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJ CXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAw OwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJ dmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0r CQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4n IHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJm4sdmFs dWUpKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgImUiKSkKLSsJCQl7Ci0rCQkJaWYgKCFkb19oZXgyYm4oJmUsdmFsdWUpKQotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwg IlNIQUFsZyIpKQotKwkJCXsKLSsJCQlpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTEiKSkKLSsJCQkJ ZGdzdCA9IEVWUF9zaGExKCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTIyNCIp KQotKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOwotKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUs ICJTSEEyNTYiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKLSsJCQllbHNlIGlmICghc3Ry Y21wKHZhbHVlLCAiU0hBMzg0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMzg0KCk7Ci0rCQkJZWxz ZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTUxMigp OwotKwkJCWVsc2UKLSsJCQkJewotKwkJCQlmcHJpbnRmKHN0ZGVyciwKLSsJCQkJCSJGQVRBTDog dW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKLSsJCQkJCQkJCXZhbHVlKTsKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQkJfQotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9y OwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJ CQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlMi KSkKLSsJCQl7Ci0rCQkJaWYgKFMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJaWYgKHN0 cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCVMgPSBoZXgyYmlu X20odmFsdWUsICZTbGVuKTsKLSsJCQlpZiAoIVMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0r CQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUmVzdWx0IikpCi0rCQkJY29udGlu dWU7Ci0rCQllbHNlCi0rCQkJZ290byBwYXJzZV9lcnJvcjsKLSsKLSsJCWZwdXRzKG9saW5lYnVm LCBvdXQpOwotKwotKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYgUyAmJiBkZ3N0KQotKwkJCXsKLSsJ CQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3QsCi0rCQkJCQlNc2csIE1zZ2xlbiwg UywgU2xlbiwgU2FsdGxlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKE1z Zyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlPUEVOU1NMX2ZyZWUoUyk7Ci0rCQkJUyA9IE5VTEw7 Ci0rCQkJfQotKwotKwkJfQotKwotKwotKwlyZXQgPSAxOwotKwotKwotKwllcnJvcjoKLSsKLSsJ aWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVmKTsKLSsJaWYgKGxpbmVidWYp Ci0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChuKQotKwkJQk5fZnJlZShuKTsKLSsJ aWYgKGUpCi0rCQlCTl9mcmVlKGUpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJv cjoKLSsKLSsJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxp bmUgJWRcbiIsIGxudW0pOwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGlu dCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAotKwkJQklHTlVNICpuLCBCSUdOVU0gKmUsCi0rCQlj b25zdCBFVlBfTUQgKmRnc3QsCi0rCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNnbGVuLAot KwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbikKLSsJewotKwlpbnQg cmV0ID0gMCwgcjsKLSsJLyogU2V0dXAgUlNBIGFuZCBFVlBfUEtFWSBzdHJ1Y3R1cmVzICovCi0r CVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7Ci0rCUVWUF9QS0VZIHBrOwotKwlFVlBfTURfQ1RYIGN0 eDsKLSsJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKLSsJcnNhX3B1YmtleSA9IEZJUFNfcnNh X25ldygpOwotKwlpZiAoIXJzYV9wdWJrZXkpCi0rCQlnb3RvIGVycm9yOwotKwlyc2FfcHVia2V5 LT5uID0gQk5fZHVwKG4pOwotKwlyc2FfcHVia2V5LT5lID0gQk5fZHVwKGUpOwotKwlpZiAoIXJz YV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCi0rCQlnb3RvIGVycm9yOwotKwlway50eXBl ID0gRVZQX1BLRVlfUlNBOwotKwlway5wa2V5LnJzYSA9IHJzYV9wdWJrZXk7Ci0rCi0rCUVWUF9N RF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJCXsKLSsJCU1fRVZQ X01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChT YWx0bGVuIDw8IDE2KSk7Ci0rCQl9Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCi0rCQlNX0VW UF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7Ci0rCWlm ICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwot KwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQotKwkJZ290byBlcnJv cjsKLSsKLSsJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBTLCBTbGVuLCAmcGspOwotKwotKwot KwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rCWlmIChyIDwgMCkKLSsJCWdvdG8gZXJy b3I7Ci0rCUVSUl9jbGVhcl9lcnJvcigpOwotKwotKwlpZiAociA9PSAwKQotKwkJZnB1dHMoIlJl c3VsdCA9IEZcbiIsIG91dCk7Ci0rCWVsc2UKLSsJCWZwdXRzKCJSZXN1bHQgPSBQXG4iLCBvdXQp OwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKHJzYV9wdWJrZXkpCi0rCQlGSVBT X3JzYV9mcmVlKHJzYV9wdWJrZXkpOwotKwlpZiAoYnVmKQotKwkJT1BFTlNTTF9mcmVlKGJ1Zik7 Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTAtMDItMTYgMjI6 NTg6MzEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfc2hhdGVzdC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAw Ci1AQCAtMCwwICsxLDM4OCBAQAotKy8qIGZpcHNfc2hhdGVzdC5jICovCi0rLyogV3JpdHRlbiBi eSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NM Ci0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0 IChjKSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu Ci0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoK LSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK LSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAot KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqCi0rICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3Jp dHRlbiBieSBFcmljIFlvdW5nCi0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0 c29mdC5jb20pLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUg PGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0r Ci0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFNIQVhYWCBzdXBwb3J0XG4iKTsKLSsgICAg cmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwot K3N0YXRpYyBpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOwotK3N0YXRpYyBpbnQg cHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFy ICpNc2csIGludCBNc2dsZW4pOwotK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01E ICptZCwgRklMRSAqb3V0LAotKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pOwot KwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsJewotKwlGSUxFICppbiA9IE5V TEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0ID0gMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9z ZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQot KwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Bl bihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0r CWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4i KTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8g ZW5kOwotKwkJfQotKwotKwlpZiAoIWRnc3RfdGVzdChvdXQsIGluKSkKLSsJCXsKLSsJCWZwcmlu dGYoc3RkZXJyLCAiRkFUQUwgZGlnZXN0IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7Ci0rCQln b3RvIGVuZDsKLSsJCX0KLSsJZWxzZQotKwkJcmV0ID0gMDsKLSsKLSsJZW5kOgotKwotKwlpZiAo cmV0KQotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCi0rCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4p KQotKwkJZmNsb3NlKGluKTsKLSsJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCi0rCQlmY2xv c2Uob3V0KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsKLSsJfQotKwotKyNkZWZpbmUgU0hBX1RFU1Rf TUFYX0JJVFMJMTAyNDAwCi0rI2RlZmluZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgoKFNIQV9URVNU X01BWF9CSVRTID4+IDMpICogMikgKyAxMDApCi0rCi0raW50IGRnc3RfdGVzdChGSUxFICpvdXQs IEZJTEUgKmluKQotKwl7Ci0rCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOwotKwljaGFyICpsaW5l YnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwl1bnNp Z25lZCBjaGFyICpNc2cgPSBOVUxMLCAqU2VlZCA9IE5VTEw7Ci0rCWxvbmcgTXNnTGVuID0gLTEs IExlbiA9IC0xLCBTZWVkTGVuID0gLTE7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7 Ci0rCi0rCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7Ci0r CWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYg KCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCi0rCXdoaWxlIChm Z2V0cyhvbGluZWJ1ZiwgU0hBX1RFU1RfTUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsr OwotKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwot KwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqa2V5d29yZCkpCi0rCQkJa2V5d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWdu ICovCi0rCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0 YXJ0cyB3aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0r CQkJewotKwkJCWZwdXRzKG9saW5lYnVmLCBvdXQpOwotKwkJCWNvbnRpbnVlOwotKwkJCX0KLSsK LSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLwotKwkJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJCSpxLS0gPSAwOwotKwotKwkJKnAg PSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZy b20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0r CQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICov Ci0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKLSsJCXdoaWxlICgqcCA9PSAnXG4n IHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwiW0wiKSAmJiAqcD09J10nKQotKwkJCXsKLSsJCQlzd2l0Y2ggKGF0 b2kodmFsdWUpKQotKwkJCQl7Ci0rCQkJCWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7ICAgYnJlYWs7 Ci0rCQkJCWNhc2UgMjg6IG1kPUVWUF9zaGEyMjQoKTsgYnJlYWs7Ci0rCQkJCWNhc2UgMzI6IG1k PUVWUF9zaGEyNTYoKTsgYnJlYWs7Ci0rCQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEzODQoKTsgYnJl YWs7Ci0rCQkJCWNhc2UgNjQ6IG1kPUVWUF9zaGE1MTIoKTsgYnJlYWs7Ci0rCQkJCWRlZmF1bHQ6 IGdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJCX0KLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJMZW4iKSkKLSsJCQl7Ci0rCQkJaWYgKExlbiAhPSAtMSkKLSsJCQkJZ290byBwYXJz ZV9lcnJvcjsKLSsJCQlMZW4gPSBhdG9pKHZhbHVlKTsKLSsJCQlpZiAoTGVuIDwgMCkKLSsJCQkJ Z290byBwYXJzZV9lcnJvcjsKLSsJCQkvKiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMgb2YgOCBiaXRz ICovCi0rCQkJaWYgKExlbiAmIDB4NykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAo TGVuID4gU0hBX1RFU1RfTUFYX0JJVFMpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTXNn TGVuID0gTGVuID4+IDM7Ci0rCQkJfQotKwotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi TXNnIikpCi0rCQkJewotKwkJCWxvbmcgdG1wbGVuOwotKwkJCWlmIChzdHJsZW4odmFsdWUpICYg MSkKLSsJCQkJKigtLXZhbHVlKSA9ICcwJzsKLSsJCQlpZiAoTXNnKQotKwkJCQlnb3RvIHBhcnNl X2Vycm9yOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJnRtcGxlbik7Ci0rCQkJaWYgKCFN c2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiU2VlZCIpKQotKwkJCXsKLSsJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJ CSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKFNlZWQpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJU2VlZCA9IGhleDJiaW5fbSh2YWx1ZSwgJlNlZWRMZW4pOwotKwkJCWlmICghU2VlZCkK LSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJNRCIpKQotKwkJCWNvbnRpbnVlOwotKwkJZWxzZQotKwkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCi0rCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsKLSsJCWlmIChtZCAmJiBNc2cgJiYgKE1z Z0xlbiA+PSAwKSkKLSsJCQl7Ci0rCQkJaWYgKCFwcmludF9kZ3N0KG1kLCBvdXQsIE1zZywgTXNn TGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cg PSBOVUxMOwotKwkJCU1zZ0xlbiA9IC0xOwotKwkJCUxlbiA9IC0xOwotKwkJCX0KLSsJCWVsc2Ug aWYgKG1kICYmIFNlZWQgJiYgKFNlZWRMZW4gPiAwKSkKLSsJCQl7Ci0rCQkJaWYgKCFwcmludF9t b250ZShtZCwgb3V0LCBTZWVkLCBTZWVkTGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVO U1NMX2ZyZWUoU2VlZCk7Ci0rCQkJU2VlZCA9IE5VTEw7Ci0rCQkJU2VlZExlbiA9IC0xOwotKwkJ CX0KLSsJCi0rCi0rCQl9Ci0rCi0rCi0rCXJldCA9IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlp ZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikK LSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKE1zZykKLSsJCU9QRU5TU0xfZnJlZShN c2cpOwotKwlpZiAoU2VlZCkKLSsJCU9QRU5TU0xfZnJlZShTZWVkKTsKLSsKLSsJcmV0dXJuIHJl dDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2Ug ZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsK LSsJfQotKwotK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKmVtZCwgRklMRSAq b3V0LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKQotKwl7Ci0rCWludCBpLCBt ZGxlbjsKLSsJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOwotKwlpZiAoIUVWUF9E aWdlc3QoTXNnLCBNc2dsZW4sIG1kLCAodW5zaWduZWQgaW50ICopJm1kbGVuLCBlbWQsIE5VTEwp KQotKwkJewotKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0ZGVycik7Ci0r CQlyZXR1cm4gMDsKLSsJCX0KLSsJZnB1dHMoIk1EID0gIiwgb3V0KTsKLSsJZm9yIChpID0gMDsg aSA8IG1kbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtZFtpXSk7Ci0rCWZwdXRz KCJcbiIsIG91dCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBwcmludF9tb250 ZShjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCi0rCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBp bnQgU2VlZExlbikKLSsJewotKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKLSsJaW50IHJldCA9IDA7 Ci0rCUVWUF9NRF9DVFggY3R4OwotKwl1bnNpZ25lZCBjaGFyICptMSwgKm0yLCAqbTMsICpwOwot Kwl1bnNpZ25lZCBpbnQgbWxlbiwgbTFsZW4sIG0ybGVuLCBtM2xlbjsKLSsKLSsJRVZQX01EX0NU WF9pbml0KCZjdHgpOwotKwotKwlpZiAoU2VlZExlbiA+IEVWUF9NQVhfTURfU0laRSkKLSsJCW1s ZW4gPSBTZWVkTGVuOwotKwllbHNlCi0rCQltbGVuID0gRVZQX01BWF9NRF9TSVpFOwotKwotKwlt MSA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwotKwltMiA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwot KwltMyA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOwotKwotKwlpZiAoIW0xIHx8ICFtMiB8fCAhbTMp Ci0rCQlnb3RvIG1jX2Vycm9yOwotKwotKwltMWxlbiA9IG0ybGVuID0gbTNsZW4gPSBTZWVkTGVu OwotKwltZW1jcHkobTEsIFNlZWQsIFNlZWRMZW4pOwotKwltZW1jcHkobTIsIFNlZWQsIFNlZWRM ZW4pOwotKwltZW1jcHkobTMsIFNlZWQsIFNlZWRMZW4pOwotKwotKwlmcHV0cygiXG4iLCBvdXQp OwotKwotKwlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspCi0rCQl7Ci0rCQlmb3IgKGkgPSAwOyBp IDwgMTAwMDsgaSsrKQotKwkJCXsKLSsJCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBtZCwgTlVM TCk7Ci0rCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMSwgbTFsZW4pOwotKwkJCUVWUF9EaWdl c3RVcGRhdGUoJmN0eCwgbTIsIG0ybGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0z LCBtM2xlbik7Ci0rCQkJcCA9IG0xOwotKwkJCW0xID0gbTI7Ci0rCQkJbTFsZW4gPSBtMmxlbjsK LSsJCQltMiA9IG0zOwotKwkJCW0ybGVuID0gbTNsZW47Ci0rCQkJbTMgPSBwOwotKwkJCUVWUF9E aWdlc3RGaW5hbF9leCgmY3R4LCBtMywgJm0zbGVuKTsKLSsJCQl9Ci0rCQlmcHJpbnRmKG91dCwg IkNPVU5UID0gJWRcbiIsIGopOwotKwkJZnB1dHMoIk1EID0gIiwgb3V0KTsKLSsJCWZvciAoayA9 IDA7IGsgPCBtM2xlbjsgaysrKQotKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIG0zW2tdKTsKLSsJ CWZwdXRzKCJcblxuIiwgb3V0KTsKLSsJCW1lbWNweShtMSwgbTMsIG0zbGVuKTsKLSsJCW1lbWNw eShtMiwgbTMsIG0zbGVuKTsKLSsJCW0xbGVuID0gbTJsZW4gPSBtM2xlbjsKLSsJCX0KLSsKLSsJ cmV0ID0gMTsKLSsKLSsJbWNfZXJyb3I6Ci0rCWlmIChtMSkKLSsJCU9QRU5TU0xfZnJlZShtMSk7 Ci0rCWlmIChtMikKLSsJCU9QRU5TU0xfZnJlZShtMik7Ci0rCWlmIChtMykKLSsJCU9QRU5TU0xf ZnJlZShtMyk7Ci0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJcmV0dXJuIHJl dDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v Zmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBz L2NhdnMvZmlwc191dGwuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvY2F2 cy9maXBzX3V0bC5oLmZpcHMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAkyMDEwLTAy LTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwzNDMgQEAKLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0r ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0rICoKLSsgKi8KLSsKLSt2b2lkIGRvX3ByaW50X2Vycm9ycyh2b2lkKQotKwl7Ci0r CWNvbnN0IGNoYXIgKmZpbGUsICpkYXRhOwotKwlpbnQgbGluZSwgZmxhZ3M7Ci0rCXVuc2lnbmVk IGxvbmcgbDsKLSsJd2hpbGUgKChsID0gRVJSX2dldF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsICZs aW5lLCAmZGF0YSwgJmZsYWdzKSkpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiVs eDpsaWI9JWQsZnVuYz0lZCxyZWFzb249JWQiCi0rCQkJCSI6ZmlsZT0lczpsaW5lPSVkOiVzXG4i LAotKwkJCWwsIEVSUl9HRVRfTElCKGwpLCBFUlJfR0VUX0ZVTkMobCksIEVSUl9HRVRfUkVBU09O KGwpLAotKwkJCWZpbGUsIGxpbmUsIGZsYWdzICYgRVJSX1RYVF9TVFJJTkcgPyBkYXRhIDogIiIp OwotKwkJfQotKwl9Ci0rCi0raW50IGhleDJiaW4oY29uc3QgY2hhciAqaW4sIHVuc2lnbmVkIGNo YXIgKm91dCkKLSsgICAgewotKyAgICBpbnQgbjEsIG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNo OwotKwotKyAgICBmb3IgKG4xPTAsbjI9MCA7IGluW24xXSAmJiBpbltuMV0gIT0gJ1xuJyA7ICkK LSsJeyAvKiBmaXJzdCBieXRlICovCi0rCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8 PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJZWxzZSBpZiAoKGluW24xXSA+ PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAx MDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKLSsJICAg IGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkgICAgcmV0dXJuIC0xOwotKwlp ZighaW5bbjFdKQotKwkgICAgewotKwkgICAgb3V0W24yKytdPWNoOwotKwkgICAgYnJlYWs7Ci0r CSAgICB9Ci0rCW91dFtuMl0gPSBjaCA8PCA0OwotKwkvKiBzZWNvbmQgYnl0ZSAqLwotKwlpZiAo KGluW24xXSA+PSAnMCcpICYmIChpbltuMV0gPD0gJzknKSkKLSsJICAgIGNoID0gaW5bbjErK10g LSAnMCc7Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCi0r CSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsgMTA7Ci0rCWVsc2UgaWYgKChpbltuMV0gPj0gJ2En KSAmJiAoaW5bbjFdIDw9ICdmJykpCi0rCSAgICBjaCA9IGluW24xKytdIC0gJ2EnICsgMTA7Ci0r CWVsc2UKLSsJICAgIHJldHVybiAtMTsKLSsJb3V0W24yKytdIHw9IGNoOwotKwl9Ci0rICAgIHJl dHVybiBuMjsKLSsgICAgfQotKwotK3Vuc2lnbmVkIGNoYXIgKmhleDJiaW5fbShjb25zdCBjaGFy ICppbiwgbG9uZyAqcGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyICpwOwotKwlwID0gT1BFTlNT TF9tYWxsb2MoKHN0cmxlbihpbikgKyAxKS8yKTsKLSsJKnBsZW4gPSBoZXgyYmluKGluLCBwKTsK LSsJcmV0dXJuIHA7Ci0rCX0KLSsKLStpbnQgZG9faGV4MmJuKEJJR05VTSAqKnByLCBjb25zdCBj aGFyICppbikKLSsJewotKwl1bnNpZ25lZCBjaGFyICpwOwotKwlsb25nIHBsZW47Ci0rCWludCBy ID0gMDsKLSsJcCA9IGhleDJiaW5fbShpbiwgJnBsZW4pOwotKwlpZiAoIXApCi0rCQlyZXR1cm4g MDsKLSsJaWYgKCEqcHIpCi0rCQkqcHIgPSBCTl9uZXcoKTsKLSsJaWYgKCEqcHIpCi0rCQlyZXR1 cm4gMDsKLSsJaWYgKEJOX2JpbjJibihwLCBwbGVuLCAqcHIpKQotKwkJciA9IDE7Ci0rCU9QRU5T U0xfZnJlZShwKTsKLSsJcmV0dXJuIHI7Ci0rCX0KLSsKLStpbnQgZG9fYm5fcHJpbnQoRklMRSAq b3V0LCBCSUdOVU0gKmJuKQotKwl7Ci0rCWludCBsZW4sIGk7Ci0rCXVuc2lnbmVkIGNoYXIgKnRt cDsKLSsJbGVuID0gQk5fbnVtX2J5dGVzKGJuKTsKLSsJaWYgKGxlbiA9PSAwKQotKwkJewotKwkJ ZnB1dHMoIjAwIiwgb3V0KTsKLSsJCXJldHVybiAxOwotKwkJfQotKwotKwl0bXAgPSBPUEVOU1NM X21hbGxvYyhsZW4pOwotKwlpZiAoIXRtcCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiTWVt b3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUJOX2JuMmJp bihibiwgdG1wKTsKLSsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotKwkJZnByaW50ZihvdXQs ICIlMDJ4IiwgdG1wW2ldKTsKLSsJT1BFTlNTTF9mcmVlKHRtcCk7Ci0rCXJldHVybiAxOwotKwl9 Ci0rCi0raW50IGRvX2JuX3ByaW50X25hbWUoRklMRSAqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBC SUdOVU0gKmJuKQotKwl7Ci0rCWludCByOwotKwlmcHJpbnRmKG91dCwgIiVzID0gIiwgbmFtZSk7 Ci0rCXIgPSBkb19ibl9wcmludChvdXQsIGJuKTsKLSsJaWYgKCFyKQotKwkJcmV0dXJuIDA7Ci0r CWZwdXRzKCJcbiIsIG91dCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IHBhcnNlX2xpbmUo Y2hhciAqKnBrdywgY2hhciAqKnB2YWwsIGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQot Kwl7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOwotKwlzdHJjcHkobGluZWJ1Ziwg b2xpbmVidWYpOwotKwlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJLyogU2tpcCBsZWFkaW5nIHNwYWNl ICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCWtleXdv cmQrKzsKLSsKLSsJLyogTG9vayBmb3IgPSBzaWduICovCi0rCXAgPSBzdHJjaHIobGluZWJ1Ziwg Jz0nKTsKLSsKLSsJLyogSWYgbm8gJz0nIGV4aXQgKi8KLSsJaWYgKCFwKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCXEgPSBwIC0gMTsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCSpxLS0gPSAwOwotKwotKwkqcCA9 IDA7Ci0rCXZhbHVlID0gcCArIDE7Ci0rCi0rCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCXZh bHVlKys7Ci0rCi0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCXAg PSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBp c3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCSpwLS0gPSAwOwotKwotKwkqcGt3ID0ga2V5 d29yZDsKLSsJKnB2YWwgPSB2YWx1ZTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStCSUdOVU0gKmhl eDJibihjb25zdCBjaGFyICppbikKLSsgICAgewotKyAgICBCSUdOVU0gKnA9TlVMTDsKLSsKLSsg ICAgaWYgKCFkb19oZXgyYm4oJnAsIGluKSkKLSsJcmV0dXJuIE5VTEw7Ci0rCi0rICAgIHJldHVy biBwOwotKyAgICB9Ci0rCi0raW50IGJpbjJoZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50 IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG4xLCBuMjsKLSsgICAgdW5zaWduZWQg Y2hhciBjaDsKLSsKLSsgICAgZm9yIChuMT0wLG4yPTAgOyBuMSA8IGxlbiA7ICsrbjEpCi0rCXsK LSsJY2g9aW5bbjFdID4+IDQ7Ci0rCWlmIChjaCA8PSAweDA5KQotKwkgICAgb3V0W24yKytdPWNo KycwJzsKLSsJZWxzZQotKwkgICAgb3V0W24yKytdPWNoLTEwKydhJzsKLSsJY2g9aW5bbjFdICYg MHgwZjsKLSsJaWYoY2ggPD0gMHgwOSkKLSsJICAgIG91dFtuMisrXT1jaCsnMCc7Ci0rCWVsc2UK LSsJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7Ci0rCX0KLSsgICAgb3V0W24yXT0nXDAnOwotKyAg ICByZXR1cm4gbjI7Ci0rICAgIH0KLSsKLSt2b2lkIHB2KGNvbnN0IGNoYXIgKnRhZyxjb25zdCB1 bnNpZ25lZCBjaGFyICp2YWwsaW50IGxlbikKLSsgICAgewotKyAgICBjaGFyIG9idWZbMjA0OF07 Ci0rCi0rICAgIGJpbjJoZXgodmFsLGxlbixvYnVmKTsKLSsgICAgcHJpbnRmKCIlcyA9ICVzXG4i LHRhZyxvYnVmKTsKLSsgICAgfQotKwotKy8qIFRvIGF2b2lkIGV4dGVuc2l2ZSBjaGFuZ2VzIHRv IHRlc3QgcHJvZ3JhbSBhdCB0aGlzIHN0YWdlIGp1c3QgY29udmVydAotKyAqIHRoZSBpbnB1dCBs aW5lIGludG8gYW4gYWNjZXB0YWJsZSBmb3JtLiBLZXl3b3JkIGxpbmVzIGNvbnZlcnRlZCB0byBm b3JtCi0rICogImtleXdvcmQgPSB2YWx1ZVxuIiBubyBtYXR0ZXIgd2hhdCB3aGl0ZSBzcGFjZSBw cmVzZW50LCBhbGwgb3RoZXIgbGluZXMKLSsgKiBqdXN0IGhhdmUgbGVhZGluZyBhbmQgdHJhaWxp bmcgc3BhY2UgcmVtb3ZlZC4KLSsgKi8KLSsKLStpbnQgdGlkeV9saW5lKGNoYXIgKmxpbmVidWYs IGNoYXIgKm9saW5lYnVmKQotKwl7Ci0rCWNoYXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOwot KwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwlrZXl3b3JkID0gbGluZWJ1ZjsKLSsJLyog U2tpcCBsZWFkaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpr ZXl3b3JkKSkKLSsJCWtleXdvcmQrKzsKLSsJLyogTG9vayBmb3IgPSBzaWduICovCi0rCXAgPSBz dHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJLyogSWYgbm8gJz0nIGp1c3QgY2hvcCBsZWFkaW5n LCB0cmFpbGluZyB3cyAqLwotKwlpZiAoIXApCi0rCQl7Ci0rCQlwID0ga2V5d29yZCArIHN0cmxl bihrZXl3b3JkKSAtIDE7Ci0rCQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSpwKSkKLSsJCQkqcC0tID0gMDsKLSsJCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7 Ci0rCQlzdHJjYXQob2xpbmVidWYsICJcbiIpOwotKwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCi0rCXEg PSBwIC0gMTsKLSsKLSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCSpxLS0gPSAwOwotKwotKwkqcCA9IDA7Ci0rCXZh bHVlID0gcCArIDE7Ci0rCi0rCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8K LSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCXZhbHVlKys7Ci0r Ci0rCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCXAgPSB2YWx1ZSAr IHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSpwKSkKLSsJCSpwLS0gPSAwOwotKwotKwlzdHJjcHkob2xpbmVidWYsIGtl eXdvcmQpOwotKwlzdHJjYXQob2xpbmVidWYsICIgPSAiKTsKLSsJc3RyY2F0KG9saW5lYnVmLCB2 YWx1ZSk7Ci0rCXN0cmNhdChvbGluZWJ1ZiwgIlxuIik7Ci0rCi0rCXJldHVybiAxOwotKwl9Ci0r Ci0rLyogTkI6IHRoaXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgX2JpdHNfIHJlYWQgKi8KLStpbnQg YmludDJiaW4oY29uc3QgY2hhciAqaW4sIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKLSsg ICAgewotKyAgICBpbnQgbjsKLSsKLSsgICAgbWVtc2V0KG91dCwwLGxlbik7Ci0rICAgIGZvcihu PTAgOyBuIDwgbGVuIDsgKytuKQotKwlpZihpbltuXSA9PSAnMScpCi0rCSAgICBvdXRbbi84XXw9 KDB4ODAgPj4gKG4lOCkpOwotKyAgICByZXR1cm4gbGVuOwotKyAgICB9Ci0rCi0raW50IGJpbjJi aW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLGludCBsZW4sY2hhciAqb3V0KQotKyAgICB7Ci0r ICAgIGludCBuOwotKwotKyAgICBmb3Iobj0wIDsgbiA8IGxlbiA7ICsrbikKLSsJb3V0W25dPShp bltuLzhdJigweDgwID4+IChuJTgpKSkgPyAnMScgOiAnMCc7Ci0rICAgIHJldHVybiBuOwotKyAg ICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCi0rCi0rdm9pZCBQcmludFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBp bnQgbGVuKQotK3sKLSsjaWYgVkVSQk9TRQotKyAgY2hhciBvYnVmWzIwNDhdOwotKyAgaW50IG9s ZW47Ci0rICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7Ci0rICBwcmludGYoIiVzID0g JS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsjZW5kaWYKLSt9Ci0rCi0rdm9pZCBPdXRwdXRW YWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbiwgRklMRSAqcmZwLGlu dCBiaXRtb2RlKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsgICAgaW50IG9sZW47 Ci0rCi0rICAgIGlmKGJpdG1vZGUpCi0rCW9sZW49YmluMmJpbnQodmFsLGxlbixvYnVmKTsKLSsg ICAgZWxzZQotKwlvbGVuPWJpbjJoZXgodmFsLGxlbixvYnVmKTsKLSsKLSsgICAgZnByaW50Zihy ZnAsICIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rI2lmIFZFUkJPU0UKLSsgICAg cHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywgb2xlbiwgb2J1Zik7Ci0rI2VuZGlmCi0rICAgIH0K LSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHNfZXJyLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vZmlwc19lcnIuYy5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwc19lcnIuYwkyMDEwLTAy LTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw3IEBACi0rI2luY2x1ZGUg PG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNs dWRlICJmaXBzX2Vyci5oIgotKyNlbHNlCi0rc3RhdGljIHZvaWQgKmR1bW15PSZkdW1teTsKLSsj ZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHNfZXJyLmguZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzX2Vyci5oCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vZmlwc19lcnIuaC5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwc19lcnIuaAkyMDEw LTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwxMzcgQEAKLSsvKiBj cnlwdG8vZmlwc19lcnIuaCAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAx OTk5LTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoK LSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K LSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBPcGVuU1NMLm9yZy4KLSsg KgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE Ci0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsvKiBOT1RFOiB0aGlzIGZpbGUgd2FzIGF1dG8g Z2VuZXJhdGVkIGJ5IHRoZSBta2Vyci5wbCBzY3JpcHQ6IGFueSBjaGFuZ2VzCi0rICogbWFkZSB0 byBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBuZXh0IHVwZGF0ZXMgdGhp cyBmaWxlLAotKyAqIG9ubHkgcmVhc29uIHN0cmluZ3Mgd2lsbCBiZSBwcmVzZXJ2ZWQuCi0rICov Ci0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotKy8qIEJFR0lOIEVSUk9SIENPREVTICovCi0rI2lm bmRlZiBPUEVOU1NMX05PX0VSUgotKwotKyNkZWZpbmUgRVJSX0ZVTkMoZnVuYykgRVJSX1BBQ0so RVJSX0xJQl9GSVBTLGZ1bmMsMCkKLSsjZGVmaW5lIEVSUl9SRUFTT04ocmVhc29uKSBFUlJfUEFD SyhFUlJfTElCX0ZJUFMsMCxyZWFzb24pCi0rCi0rc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBT X3N0cl9mdW5jdHNbXT0KLSsJewotK3tFUlJfRlVOQyhGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJB TVMpLAkiREhfQlVJTFRJTl9HRU5QQVJBTVMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0RTQV9CVUlM VElOX1BBUkFNR0VOKSwJIkRTQV9CVUlMVElOX1BBUkFNR0VOIn0sCi0re0VSUl9GVU5DKEZJUFNf Rl9EU0FfRE9fU0lHTiksCSJEU0FfZG9fc2lnbiJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RP X1ZFUklGWSksCSJEU0FfZG9fdmVyaWZ5In0sCi0re0VSUl9GVU5DKEZJUFNfRl9FVlBfQ0lQSEVS SU5JVF9FWCksCSJFVlBfQ2lwaGVySW5pdF9leCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0RJ R0VTVElOSVRfRVgpLAkiRVZQX0RpZ2VzdEluaXRfZXgifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJ UFNfQ0hFQ0tfRFNBKSwJIkZJUFNfQ0hFQ0tfRFNBIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBT X0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCksCSJGSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklO VCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19SU0EpLAkiRklQU19DSEVDS19SU0Ei fSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfRFNBX0NIRUNLKSwJIkZJUFNfRFNBX0NIRUNLIn0s Ci0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX01PREVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwKLSt7 RVJSX0ZVTkMoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCksCSJmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTKSwJIkZJ UFNfc2VsZnRlc3RfYWVzIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyks CSJGSVBTX3NlbGZ0ZXN0X2RlcyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9E U0EpLAkiRklQU19zZWxmdGVzdF9kc2EifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRF U1RfSE1BQyksCSJGSVBTX3NlbGZ0ZXN0X2htYWMifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNf U0VMRlRFU1RfUk5HKSwJIkZJUFNfc2VsZnRlc3Rfcm5nIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9G SVBTX1NFTEZURVNUX1NIQTEpLAkiRklQU19zZWxmdGVzdF9zaGExIn0sCi0re0VSUl9GVU5DKEZJ UFNfRl9IQVNIX0ZJTkFMKSwJIkhBU0hfRklOQUwifSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9C VUlMVElOX0tFWUdFTiksCSJSU0FfQlVJTFRJTl9LRVlHRU4ifSwKLSt7RVJSX0ZVTkMoRklQU19G X1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUKSwJIlJTQV9FQVlfUFJJVkFURV9ERUNSWVBUIn0sCi0r e0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCksCSJSU0FfRUFZX1BSSVZB VEVfRU5DUllQVCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCks CSJSU0FfRUFZX1BVQkxJQ19ERUNSWVBUIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BV QkxJQ19FTkNSWVBUKSwJIlJTQV9FQVlfUFVCTElDX0VOQ1JZUFQifSwKLSt7RVJSX0ZVTkMoRklQ U19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCksCSJSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgi fSwKLSt7RVJSX0ZVTkMoRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZ VEVTIn0sCi0rezAsTlVMTH0KLSsJfTsKLSsKLStzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNf c3RyX3JlYXNvbnNbXT0KLSsJewotK3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUp ICAgICAgLCJjYW5ub3QgcmVhZCBleGUifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JF QURfRVhFX0RJR0VTVCksImNhbm5vdCByZWFkIGV4ZSBkaWdlc3QifSwKLSt7RVJSX1JFQVNPTihG SVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRSksImNvbnRyYWRpY3RpbmcgZXZpZGVuY2UifSwK LSt7RVJSX1JFQVNPTihGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSCksImV4ZSBkaWdl c3QgZG9lcyBub3QgbWF0Y2gifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9F U19OT1RfTUFUQ0gpLCJmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCJ9LAotK3tFUlJfUkVBU09O KEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEKSwiZmlu Z2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggbm9ucGljIHJlbG9jYXRlZCJ9LAotK3tFUlJfUkVBU09O KEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HKSwiZmlu Z2VycHJpbnQgZG9lcyBub3QgbWF0Y2ggc2VnbWVudCBhbGlhc2luZyJ9LAotK3tFUlJfUkVBU09O KEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpLCJmaXBzIG1vZGUgYWxyZWFkeSBzZXQifSwK LSt7RVJSX1JFQVNPTihGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpICwiZmlwcyBzZWxmdGVz dCBmYWlsZWQifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKSAgICwi aW52YWxpZCBrZXkgbGVuZ3RoIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0tFWV9UT09fU0hPUlQp ICAgICAgICAsImtleSB0b28gc2hvcnQifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJUFNf TUVUSE9EKSAgICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1BB SVJXSVNFX1RFU1RfRkFJTEVEKSAsInBhaXJ3aXNlIHRlc3QgZmFpbGVkIn0sCi0re0VSUl9SRUFT T04oRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SKSAgICAsInJzYSBkZWNyeXB0IGVycm9yIn0sCi0r e0VSUl9SRUFTT04oRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SKSAgICAsInJzYSBlbmNyeXB0IGVy cm9yIn0sCi0re0VSUl9SRUFTT04oRklQU19SX1NFTEZURVNUX0ZBSUxFRCkgICAgICAsInNlbGZ0 ZXN0IGZhaWxlZCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9URVNUX0ZBSUxVUkUpICAgICAgICAg LCJ0ZXN0IGZhaWx1cmUifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfVU5TVVBQT1JURURfUExBVEZP Uk0pICwidW5zdXBwb3J0ZWQgcGxhdGZvcm0ifSwKLSt7MCxOVUxMfQotKwl9OwotKwotKyNlbmRp ZgotKwotK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpCi0rCXsKLSsjaWZuZGVmIE9Q RU5TU0xfTk9fRVJSCi0rCi0rCWlmIChFUlJfZnVuY19lcnJvcl9zdHJpbmcoRklQU19zdHJfZnVu Y3RzWzBdLmVycm9yKSA9PSBOVUxMKQotKwkJewotKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNf c3RyX2Z1bmN0cyk7Ci0rCQlFUlJfbG9hZF9zdHJpbmdzKDAsRklQU19zdHJfcmVhc29ucyk7Ci0r CQl9Ci0rI2VuZGlmCi0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Zp cHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Zp cHMvZmlwc19hZXNfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2Zp cHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxm dGVzdC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDEw MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgc3RydWN0Ci0rICAgIHsKLSsgICAgdW5z aWduZWQgY2hhciBrZXlbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl07Ci0r ICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxNl07Ci0rICAgIH0gdGVzdHNbXT0KLSsJewot Kwl7Ci0rCXsgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LAotKwkgIDB4 MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiB9LAotKwl7IDB4MDAsMHgxMSww eDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywKLSsJICAweDg4LDB4OTksMHhBQSwweEJCLDB4 Q0MsMHhERCwweEVFLDB4RkYgfSwKLSsJeyAweDY5LDB4QzQsMHhFMCwweEQ4LDB4NkEsMHg3Qiww eDA0LDB4MzAsCi0rCSAgMHhEOCwweENELDB4QjcsMHg4MCwweDcwLDB4QjQsMHhDNSwweDVBIH0s Ci0rCX0sCi0rCX07Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKLSsgICAgewotKyAgICB0 ZXN0c1swXS5rZXlbMF0rKzsKLSsgICAgfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2FlcygpCi0r ICAgIHsKLSsgICAgaW50IG47Ci0rICAgIGludCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVSX0NU WCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGZvcihuPTAg OyBuIDwgMSA7ICsrbikKLSsJewotKwlpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVz XzEyOF9lY2IoKSwKLSsJCQkJdGVzdHNbbl0ua2V5LCBOVUxMLAotKwkJCQl0ZXN0c1tuXS5wbGFp bnRleHQsCi0rCQkJCXRlc3RzW25dLmNpcGhlcnRleHQsCi0rCQkJCTE2KSA8PSAwKQotKwkJZ290 byBlcnI7Ci0rCX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NU WF9jbGVhbnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rCSAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX1NFTEZURVNUX0FFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgcmV0dXJu IHJldDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHMu YwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMJMjAxMC0w Mi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9maXBzL2ZpcHMuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAg LTAsMCArMSw0MTkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK LSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsKLSsjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8bGltaXRzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5o IgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ Ci0rCi0rI2lmbmRlZiBQQVRIX01BWAotKyNkZWZpbmUgUEFUSF9NQVggMTAyNAotKyNlbmRpZgot KwotK3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsOwotK3N0YXRpYyBpbnQgZmlwc19tb2Rl OwotK3N0YXRpYyBjb25zdCB2b2lkICpmaXBzX3JhbmRfY2hlY2s7Ci0rCi0rc3RhdGljIHZvaWQg Zmlwc19zZXRfbW9kZShpbnQgb25vZmYpCi0rCXsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBz X2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewot KwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlwc19tb2RlID0gb25v ZmY7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKLSsJCX0KLSsJfQot KwotK3N0YXRpYyB2b2lkIGZpcHNfc2V0X3JhbmRfY2hlY2soY29uc3Qgdm9pZCAqcmFuZF9jaGVj aykKLSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwot KwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQp IGZpcHNfd19sb2NrKCk7Ci0rCQlmaXBzX3JhbmRfY2hlY2sgPSByYW5kX2NoZWNrOwotKwkJaWYg KCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9Ci0rCX0KLSsKLStpbnQgRklQ U19tb2RlKHZvaWQpCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBvd25pbmdfdGhyZWFkID0g Zmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJ CXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJCXJldCA9IGZpcHNf bW9kZTsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOwotKwkJfQotKwly ZXR1cm4gcmV0OwotKwl9Ci0rCi0rY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpCi0r CXsKLSsJY29uc3Qgdm9pZCAqcmV0ID0gMDsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lz X293bmluZ190aHJlYWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJ aWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOwotKwkJcmV0ID0gZmlwc19yYW5kX2No ZWNrOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Ci0rCQl9Ci0rCXJl dHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkKLSsgICAg ewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwl7Ci0r CWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmICgh b3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJcmV0ID0gZmlwc19zZWxmdGVzdF9mYWls OwotKwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJfQotKyAgICByZXR1 cm4gcmV0OwotKyAgICB9Ci0rCi0rLyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRp bmUuIFRoaXMgd2lsbCBiZSBjYWxsZWQKLSsgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBv cGVyYXRpb24uIEl0IGhhcyB0aGUgbWluaW11bQotKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2 b2lkIHRvbyBiaWcgYSBwZXJmb3JtYW5jZSBoaXQuCi0rICovCi0rCi0rdm9pZCBGSVBTX3NlbGZ0 ZXN0X2NoZWNrKHZvaWQpCi0rICAgIHsKLSsgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFpbCkKLSsJ ewotKwlPcGVuU1NMRGllKF9fRklMRV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBG QUlMVVJFIik7Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2 b2lkKQotKyAgICB7Ci0rICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgIH0KLSsKLStp bnQgRklQU19zZWxmdGVzdCgpCi0rICAgIHsKLSsKLSsgICAgcmV0dXJuIEZJUFNfc2VsZnRlc3Rf c2hhMSgpCi0rCSYmIEZJUFNfc2VsZnRlc3RfaG1hYygpCi0rCSYmIEZJUFNfc2VsZnRlc3RfYWVz KCkKLSsJJiYgRklQU19zZWxmdGVzdF9kZXMoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X3JzYSgpCi0r CSYmIEZJUFNfc2VsZnRlc3RfZHNhKCk7Ci0rICAgIH0KLSsKLStpbnQgRklQU19tb2RlX3NldChp bnQgb25vZmYpCi0rICAgIHsKLSsgICAgaW50IGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKLSsg ICAgaW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBpbnQgcmV0ID0gMDsKLSsK LSsgICAgZmlwc193X2xvY2soKTsKLSsgICAgZmlwc19zZXRfc3RhcnRlZCgpOwotKyAgICBmaXBz X3NldF9vd25pbmdfdGhyZWFkKCk7Ci0rCi0rICAgIGlmKG9ub2ZmKQotKwl7Ci0rCXVuc2lnbmVk IGNoYXIgYnVmWzQ4XTsKLSsKLSsJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsKLSsJLyogRG9u J3QgZ28gaW50byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdpYwot KwkgICBzZWVkaW5nICovCi0rCWlmKEZJUFNfbW9kZSgpKQotKwkgICAgewotKwkgICAgRklQU2Vy cihGSVBTX0ZfRklQU19NT0RFX1NFVCxGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKLSsJ ICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkgICAgZ290byBl bmQ7Ci0rCSAgICB9Ci0rCi0rI2lmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCi0rCWlmICgoT1BFTlNT TF9pYTMyY2FwICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2KSkKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsRklQU19SX1VOU1VQUE9SVEVEX1BMQVRG T1JNKTsKLSsJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rCSAgICByZXQgPSAwOwotKwkg ICAgZ290byBlbmQ7Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0rCS8qIFBlcmZvcm0gUk5HIEtBVCBi ZWZvcmUgc2VlZGluZyAqLwotKwlpZiAoIUZJUFNfc2VsZnRlc3Rfcm5nKCkpCi0rCSAgICB7Ci0r CSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8g ZW5kOwotKwkgICAgfQotKwotKwkvKiBhdXRvbWFnaWNhbGx5IHNlZWQgUFJORyBpZiBub3QgYWxy ZWFkeSBzZWVkZWQgKi8KLSsJaWYoIUZJUFNfcmFuZF9zdGF0dXMoKSkKLSsJICAgIHsKLSsJICAg IGlmKFJBTkRfYnl0ZXMoYnVmLHNpemVvZiBidWYpIDw9IDApCi0rCQl7Ci0rCQlmaXBzX3NlbGZ0 ZXN0X2ZhaWwgPSAxOwotKwkJcmV0ID0gMDsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwkgICAgRklQ U19yYW5kX3NldF9rZXkoYnVmLDMyKTsKLSsJICAgIEZJUFNfcmFuZF9zZWVkKGJ1ZiszMiwxNik7 Ci0rCSAgICB9Ci0rCi0rCS8qIG5vdyBzd2l0Y2ggaW50byBGSVBTIG1vZGUgKi8KLSsJZmlwc19z ZXRfcmFuZF9jaGVjayhGSVBTX3JhbmRfbWV0aG9kKCkpOwotKwlSQU5EX3NldF9yYW5kX21ldGhv ZChGSVBTX3JhbmRfbWV0aG9kKCkpOwotKwlpZihGSVBTX3NlbGZ0ZXN0KCkpCi0rCSAgICBmaXBz X3NldF9tb2RlKDEpOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwg PSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKwlyZXQgPSAx OwotKwlnb3RvIGVuZDsKLSsJfQotKyAgICBmaXBzX3NldF9tb2RlKDApOwotKyAgICBmaXBzX3Nl bGZ0ZXN0X2ZhaWwgPSAwOwotKyAgICByZXQgPSAxOwotK2VuZDoKLSsgICAgZmlwc19jbGVhcl9v d25pbmdfdGhyZWFkKCk7Ci0rICAgIGZpcHNfd191bmxvY2soKTsKLSsgICAgcmV0dXJuIHJldDsK LSsgICAgfQotKwotK3ZvaWQgZmlwc193X2xvY2sodm9pZCkJCXsgQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc193X3VubG9jayh2b2lkKQl7IENSWVBUT193X3Vu bG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc19yX2xvY2sodm9pZCkJCXsgQ1JZ UFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotK3ZvaWQgZmlwc19yX3VubG9jayh2b2lk KQl7IENSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQotKwotK3N0YXRpYyBpbnQg Zmlwc19zdGFydGVkID0gMDsKLStzdGF0aWMgdW5zaWduZWQgbG9uZyBmaXBzX3RocmVhZCA9IDA7 Ci0rCi0rdm9pZCBmaXBzX3NldF9zdGFydGVkKHZvaWQpCi0rCXsKLSsJZmlwc19zdGFydGVkID0g MTsKLSsJfQotKwotK2ludCBmaXBzX2lzX3N0YXJ0ZWQodm9pZCkKLSsJewotKwlyZXR1cm4gZmlw c19zdGFydGVkOwotKwl9Ci0rCi0raW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7 Ci0rCWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlD UllQVE9fcl9sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChmaXBzX3RocmVhZCAhPSAw ICYmIGZpcHNfdGhyZWFkID09IENSWVBUT190aHJlYWRfaWQoKSkKLSsJCQlyZXQgPSAxOwotKwkJ Q1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJuIHJldDsK LSsJfQotKwotK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCi0rCXsKLSsJaW50IHJl dCA9IDA7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsKLSsJCUNSWVBUT193X2xv Y2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJaWYgKGZpcHNfdGhyZWFkID09IDApCi0rCQkJewot KwkJCWZpcHNfdGhyZWFkID0gQ1JZUFRPX3RocmVhZF9pZCgpOwotKwkJCXJldCA9IDE7Ci0rCQkJ fQotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCX0KLSsJcmV0dXJu IHJldDsKLSsJfQotKwotK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkKLSsJewot KwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJQ1JZ UFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoZmlwc190aHJlYWQgPT0gQ1JZ UFRPX3RocmVhZF9pZCgpKQotKwkJCXsKLSsJCQlmaXBzX3RocmVhZCA9IDA7Ci0rCQkJcmV0ID0g MTsKLSsJCQl9Ci0rCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJfQot KwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0ZXN0IHJv dXRpbmUuIFNpZ25zIGFuZCB2ZXJpZmllcyB0aGUgZGF0YQotKyAqIHN1cHBsaWVkIGluIHRicyB1 c2luZyBtZXNhZ2UgZGlnZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKLSsgKiBmbGFn cyBtZF9mbGFncy4gSWYgdGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3aWxsCi0r ICogYWRkaXRpb25hbGx5IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBrbm93biBh bnN3ZXIgdGVzdAotKyAqIFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBpZGVudGlm aWNhdGlvbiBwdXJwb3NlcyBpbiBjYXNlCi0rICogb2YgZmFpbHVyZS4KLSsgKi8KLSsKLStpbnQg Zmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAotKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQs IHVuc2lnbmVkIGludCBrYXRsZW4sCi0rCQkJY29uc3QgRVZQX01EICpkaWdlc3QsIHVuc2lnbmVk IGludCBtZF9mbGFncywKLSsJCQljb25zdCBjaGFyICpmYWlsX3N0cikKLSsJewkKLSsJaW50IHJl dCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7Ci0rCXVu c2lnbmVkIGludCBzaWdsZW47Ci0rCUVWUF9NRF9DVFggbWN0eDsKLSsJRVZQX01EX0NUWF9pbml0 KCZtY3R4KTsKLSsKLSsJaWYgKChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKLSsJCSYmIChS U0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkgPiBzaXplb2Yoc2lndG1wKSkpCi0rCQl7Ci0rCQlzaWcg PSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkpOwotKwkJaWYgKCFzaWcp Ci0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxFUlJf Ul9NQUxMT0NfRkFJTFVSRSk7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKwotKwlpZiAo dGJzbGVuID09IC0xKQotKwkJdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKLSsKLSsJaWYg KG1kX2ZsYWdzKQotKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdzKTsKLSsK LSsJaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVy cm9yOwotKwlpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3Rv IGVycm9yOwotKwlpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkp Ci0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwg bWVtY21wKGthdCwgc2lnLCBrYXRsZW4pKSkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCWlmICghRVZQ X1ZlcmlmeUluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rCQlnb3RvIGVycm9yOwotKwlp ZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCXJldCA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkpOwotKwot KwllcnJvcjoKLSsJaWYgKHNpZyAhPSBzaWd0bXApCi0rCQlPUEVOU1NMX2ZyZWUoc2lnKTsKLSsJ RVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsJaWYgKHJldCAhPSAxKQotKwkJewotKwkJRklQ U2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULEZJUFNfUl9URVNUX0ZBSUxVUkUp OwotKwkJaWYgKGZhaWxfc3RyKQotKwkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBm YWlsX3N0cik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBH ZW5lcmFsaXplZCBzeW1tZXRyaWMgY2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2 ZXJpZnkgcmVzdWx0Ci0rICogYWdhaW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBh cmUgd2l0aCBvcmlnaW5hbCBwbGFpbnRleHQuCi0rICovCi0rCi0raW50IGZpcHNfY2lwaGVyX3Rl c3QoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAotKwkJCWNv bnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKLSsJ CQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqY2lwaGVydGV4dCwKLSsJCQlpbnQgbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBb RklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRV07Ci0rCXVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19N QVhfQ0lQSEVSX1RFU1RfU0laRV07Ci0rCU9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9D SVBIRVJfVEVTVF9TSVpFKTsKLSsJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBO VUxMLCBrZXksIGl2LCAxKSA8PSAwKQotKwkJcmV0dXJuIDA7Ci0rCUVWUF9DaXBoZXIoY3R4LCBj aXRtcCwgcGxhaW50ZXh0LCBsZW4pOwotKwlpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBs ZW4pKQotKwkJcmV0dXJuIDA7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwg TlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKLSsJCXJldHVybiAwOwotKwlFVlBfQ2lwaGVyKGN0eCwg cGx0bXAsIGNpdG1wLCBsZW4pOwotKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikp Ci0rCQlyZXR1cm4gMDsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsjaWYgMAotKy8qIFRoZSBwdXJw b3NlIG9mIHRoaXMgaXMgdG8gZW5zdXJlIHRoZSBlcnJvciBjb2RlIGV4aXN0cyBhbmQgdGhlIGZ1 bmN0aW9uCi0rICogbmFtZSBpcyB0byBrZWVwIHRoZSBlcnJvciBjaGVja2luZyBzY3JpcHQgcXVp ZXQKLSsgKi8KLSt2b2lkIGhhc2hfZmluYWwodm9pZCkKLSsJewotKwlGSVBTZXJyKEZJUFNfRl9I QVNIX0ZJTkFMLEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKwl9Ci0rI2VuZGlmCi0rCi0rCi0r I2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfZGVz X3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfZGVz X3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfZGVz X3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDEw LTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwxMzkgQEAKLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0 aWMgc3RydWN0Ci0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOwotKyAgICB1bnNp Z25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0Wzhd OwotKyAgICB9IHRlc3RzMltdPQotKwl7Ci0rCXsKLSsJeyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4 YTIsMHgwNCwweDE2LDB4ZWMsCi0rCSAgMHgwYiwweDZiLDB4N2MsMHg5ZSwweDVlLDB4MTksMHhh NywweGM0IH0sCi0rCXsgMHgwNiwweGE3LDB4ZDgsMHg3OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0s Ci0rCXsgMHg0YywweDExLDB4MTcsMHg1NSwweGJmLDB4YzQsMHg0ZSwweGZkIH0KLSsJfSwKLSsJ ewotKwl7IDB4NWQsMHg5ZSwweDAxLDB4ZDMsMHgyNSwweGM3LDB4M2UsMHgzNCwKLSsJICAweDAx LDB4MTYsMHg3YywweDg1LDB4MjMsMHhkZiwweGUwLDB4NjggfSwKLSsJeyAweDljLDB4NTAsMHgw OSwweDBmLDB4NWUsMHg3ZCwweDY5LDB4N2UgfSwKLSsJeyAweGQyLDB4MGIsMHgxOCwweGRmLDB4 ZDksMHgwZCwweDllLDB4ZmYgfSwKLSsJfQotKwl9OwotKwotK3N0YXRpYyBzdHJ1Y3QKLSsgICAg ewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVsyNF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50 ZXh0WzhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07Ci0rICAgIH0gdGVzdHMz W109Ci0rCXsKLSsJewotKwl7IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwKLSsJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsCi0rCSAgMHgx MiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSwweGYwIH0sCi0rCXsgMHg4ZiwweDhmLDB4 YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCi0rCXsgMHg1OSwweDhjLDB4ZTUsMHhkMyww eDZjLDB4YTIsMHhlYSwweDFiIH0sCi0rCX0sCi0rCXsKLSsJeyAweERDLDB4QkEsMHg5OCwweDc2 LDB4NTQsMHgzMiwweDEwLDB4RkUsCi0rCSAgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIs MHhDRCwweEVGLAotKwkgIDB4RUQsMHgzOSwweEQ5LDB4NTAsMHhGQSwweDc0LDB4QkMsMHhDNCB9 LAotKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSwweEFCLDB4Q0QsMHhFRiB9LAotKwl7IDB4 MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIsMHg4NiB9LAotKwl9LAotKwl9OwotKwot K3ZvaWQgRklQU19jb3JydXB0X2RlcygpCi0rICAgIHsKLSsgICAgdGVzdHMyWzBdLnBsYWludGV4 dFswXSsrOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKLSsgICAgewotKyAg ICBpbnQgbiwgcmV0ID0gMDsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQ SEVSX0NUWF9pbml0KCZjdHgpOwotKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAyLWtleSAz REVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KLSsgICAgZm9yKG49MCA7IG4gPCAy IDsgKytuKQotKwl7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9l Y2IoKSwKLSsJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwKLSsJCQkJdGVzdHMyW25dLnBsYWludGV4 dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQotKwkJZ290byBlcnI7Ci0rCX0KLSsKLSsgICAg LyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJz ICovCi0rICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikKLSsJewotKwlpZiAoIWZpcHNfY2lwaGVy X3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAotKwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxM LAotKwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCi0r CQlnb3RvIGVycjsKLSsJfQotKyAgICByZXQgPSAxOwotKyAgICBlcnI6Ci0rICAgIEVWUF9DSVBI RVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlmIChyZXQgPT0gMCkKLSsJICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwotKyAg ICByZXR1cm4gcmV0OwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTAyLTE2IDIyOjU4 OjMxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMv Zmlwc19kc2Ffc2VsZnRlc3QuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAot QEAgLTAsMCArMSwxODYgQEAKLSsvKiBjcnlwdG8vZHNhL2RzYXRlc3QuYyAqLwotKy8qIENvcHly aWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxl bWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSku Ci0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0 aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21t ZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0 aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNT TCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRp c3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4 Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgot KyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55 IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVk LgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBz aG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0 cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEg dGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRp b24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlw dG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNy eXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVm dCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQg YXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRl IGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9t IAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3Qg aW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsg KiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycn IEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICog T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ Ci0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNl bmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2 ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQu ICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5k ZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQ dWJsaWMgTGljZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogc2VlZCwgb3V0 X3AsIG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gdGhlIE5JU1QgdGVzdCB2ZWN0b3JzICovCi0rCi0r c3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7Ci0rCTB4NzcsIDB4OGYsIDB4NDAsIDB4 NzQsIDB4NmYsIDB4NjYsIDB4YmUsIDB4MzMsIDB4Y2UsIDB4YmUsIDB4OTksIDB4MzQsCi0rCTB4 NGMsIDB4ZmMsIDB4ZjMsIDB4MjgsIDB4YWEsIDB4NzAsIDB4MmQsIDB4M2EKLSsgIAl9OwotKwot K3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW10gPSB7Ci0rCTB4ZjcsIDB4N2MsIDB4MWIsIDB4 ODMsIDB4ZDgsIDB4ZTgsIDB4NWMsIDB4N2YsIDB4ODUsIDB4MzAsIDB4MTcsIDB4NTcsCi0rCTB4 MjEsIDB4OTUsIDB4ZmUsIDB4MjYsIDB4MDQsIDB4ZWIsIDB4NDcsIDB4NGMsIDB4M2EsIDB4NGEs IDB4ODEsIDB4NGIsCi0rCTB4NzEsIDB4MmUsIDB4ZWQsIDB4NmUsIDB4NGYsIDB4M2QsIDB4MTEs IDB4MGYsIDB4N2MsIDB4ZmUsIDB4MzYsIDB4NDMsCi0rCTB4NTEsIDB4ZDksIDB4ODEsIDB4Mzks IDB4MTcsIDB4ZGYsIDB4NjIsIDB4ZjYsIDB4OWMsIDB4MDEsIDB4YTgsIDB4NjksCi0rCTB4NzEs IDB4ZGQsIDB4MjksIDB4N2YsIDB4NDcsIDB4ZTYsIDB4NjUsIDB4YTYsIDB4MjIsIDB4ZTgsIDB4 NmEsIDB4MTIsCi0rCTB4MmIsIDB4YzIsIDB4ODEsIDB4ZmYsIDB4MzIsIDB4NzAsIDB4MmYsIDB4 OWUsIDB4Y2EsIDB4NTMsIDB4MjYsIDB4NDcsCi0rCTB4MGYsIDB4NTksIDB4ZDcsIDB4OWUsIDB4 MmMsIDB4YTUsIDB4MDcsIDB4YzQsIDB4NDksIDB4NTIsIDB4YTMsIDB4ZTQsCi0rCTB4NmIsIDB4 MDQsIDB4MDAsIDB4MjUsIDB4NDksIDB4ZTIsIDB4ZTYsIDB4N2YsIDB4MjgsIDB4NzgsIDB4OTcs IDB4YjgsCi0rCTB4M2EsIDB4MzIsIDB4MTQsIDB4MzgsIDB4YTIsIDB4NTEsIDB4MzMsIDB4MjIs IDB4NDQsIDB4N2UsIDB4ZDcsIDB4ZWYsCi0rCTB4NDUsIDB4ZGIsIDB4MDYsIDB4NGEsIDB4ZDIs IDB4ODIsIDB4NGEsIDB4ODIsIDB4MmMsIDB4YjEsIDB4ZDcsIDB4ZDgsCi0rCTB4YjYsIDB4NzMs IDB4MDAsIDB4NGQsIDB4OTQsIDB4NzcsIDB4OTQsIDB4ZWYKLSsJfTsKLSsKLStzdGF0aWMgdW5z aWduZWQgY2hhciBvdXRfcVtdID0gewotKwkweGQ0LCAweDBhLCAweGFjLCAweDlmLCAweGJkLCAw eDhjLCAweDgwLCAweGMyLCAweDM4LCAweDdlLCAweDJlLCAweDBjLAotKwkweDUyLCAweDVjLCAw eGVhLCAweDM0LCAweGExLCAweDgzLCAweDMyLCAweGYzCi0rCX07Ci0rCi0rc3RhdGljIHVuc2ln bmVkIGNoYXIgb3V0X2dbXSA9IHsKLSsJMHgzNCwgMHg3MywgMHg4YiwgMHg1NywgMHg4NCwgMHg4 ZSwgMHg1NSwgMHhiZiwgMHg1NywgMHhjYywgMHg0MSwgMHhiYiwKLSsJMHg1ZSwgMHgyYiwgMHhk NSwgMHg0MiwgMHhkZCwgMHgyNCwgMHgyMiwgMHgyYSwgMHgwOSwgMHhlYSwgMHgyNiwgMHgxZSwK LSsJMHgxNywgMHg2NSwgMHhjYiwgMHgxYSwgMHhiMywgMHgxMiwgMHg0NCwgMHhhMywgMHg5ZSwg MHg5OSwgMHhlOSwgMHg2MywKLSsJMHhlYiwgMHgzMCwgMHhiMSwgMHg3OCwgMHg3YiwgMHgwOSwg MHg0MCwgMHgzMCwgMHhmYSwgMHg4MywgMHhjMiwgMHgzNSwKLSsJMHhlMSwgMHhjNCwgMHgyZCwg MHg3NCwgMHgxYSwgMHhiMSwgMHg4MywgMHg1NCwgMHhkOCwgMHgyOSwgMHhmNCwgMHhjZiwKLSsJ MHg3ZiwgMHg2ZiwgMHg2NywgMHgxYywgMHgzNiwgMHg0OSwgMHhlZSwgMHg2YywgMHhhMiwgMHgz YywgMHgyZCwgMHg2YSwKLSsJMHhlOSwgMHhkMywgMHg5YSwgMHhmNiwgMHg1NywgMHg3OCwgMHg2 ZiwgMHhmZCwgMHgzMywgMHhjZCwgMHgzYywgMHhlZCwKLSsJMHhmZCwgMHhkNCwgMHg0MSwgMHhl NiwgMHg1YywgMHg4YiwgMHhlMCwgMHg2OCwgMHgzMSwgMHg0NywgMHg0NywgMHhhZiwKLSsJMHgx MiwgMHhhNywgMHhmOSwgMHgzMiwgMHgwZCwgMHg5NCwgMHgxNSwgMHg0OCwgMHhkMCwgMHg1NCwg MHg4NSwgMHhiMiwKLSsJMHgwNCwgMHhiNSwgMHg0ZCwgMHhkNCwgMHg5ZCwgMHgwNSwgMHgyMiwg MHgyNSwgMHhkOSwgMHhmZCwgMHg2YywgMHgzNiwKLSsJMHhlZiwgMHhiZSwgMHg2OSwgMHg2Yywg MHg1NSwgMHhmNCwgMHhlZSwgMHhlYwotKwl9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOwotKwotK3ZvaWQgRklQU19jb3JydXB0 X2RzYSgpCi0rICAgIHsKLSsgICAgKytzZWVkWzBdOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2Vs ZnRlc3RfZHNhKCkKLSsgICAgewotKyAgICBEU0EgKmRzYTsKLSsgICAgaW50IGNvdW50ZXIsaSxq LCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgdW5zaWduZWQgY2hhciBi dWZbMjU2XTsKLSsgICAgdW5zaWduZWQgbG9uZyBoOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0r ICAgIEVWUF9QS0VZICpwayA9IE5VTEw7Ci0rCi0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7 Ci0rCi0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsKLSsgICAgaWYoZHNhID09IE5VTEwpCi0rCWdv dG8gZXJyOwotKyAgICBpZighRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LHNl ZWQsMjAsJmNvdW50ZXIsJmgsTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoY291bnRlciAh PSAzNzgpIAotKwlnb3RvIGVycjsKLSsgICAgaWYgKGggIT0gMikKLSsJZ290byBlcnI7Ci0rICAg IGk9Qk5fYm4yYmluKGRzYS0+cSxidWYpOwotKyAgICBqPXNpemVvZihvdXRfcSk7Ci0rICAgIGlm IChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcSxpKSAhPSAwKQotKwlnb3RvIGVycjsKLSsKLSsg ICAgaT1CTl9ibjJiaW4oZHNhLT5wLGJ1Zik7Ci0rICAgIGo9c2l6ZW9mKG91dF9wKTsKLSsgICAg aWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9wLGkpICE9IDApCi0rCWdvdG8gZXJyOwotKwot KyAgICBpPUJOX2JuMmJpbihkc2EtPmcsYnVmKTsKLSsgICAgaj1zaXplb2Yob3V0X2cpOwotKyAg ICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X2csaSkgIT0gMCkKLSsJZ290byBlcnI7Ci0r ICAgIERTQV9nZW5lcmF0ZV9rZXkoZHNhKTsKLSsKLSsgICAgaWYgKChwaz1FVlBfUEtFWV9uZXco KSkgPT0gTlVMTCkKLSsJZ290byBlcnI7Ci0rICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRz YSk7Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxM KSkKLSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHN0cjEsIDIw KSkKLSsJZ290byBlcnI7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xl biwgcGspKQotKwlnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0 eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9WZXJpZnlV cGRhdGUoJm1jdHgsIHN0cjEsIDIwKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmIChFVlBfVmVyaWZ5 RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgcGspICE9IDEpCi0rCWdvdG8gZXJyOwotKwotKyAgICBy ZXQgPSAxOwotKwotKyAgICBlcnI6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0r ICAgIGlmIChwaykKLSsJRVZQX1BLRVlfZnJlZShwayk7Ci0rICAgIGVsc2UgaWYgKGRzYSkKLSsJ RFNBX2ZyZWUoZHNhKTsKLSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0Zf RklQU19TRUxGVEVTVF9EU0EsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiBy ZXQ7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2ZpcHMvZmlwcy5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzLmgK LS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIwMTAtMDIt MTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vZmlwcy9maXBzLmgJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0w LDAgKzEsMTYzIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0r ICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNlcnJvciBG SVBTIGlzIGRpc2FibGVkLgotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsj aWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2VuZGlmCi0rCi0rc3RydWN0IGRz YV9zdDsKLStzdHJ1Y3QgZXZwX3BrZXlfc3Q7Ci0rc3RydWN0IGVudl9tZF9zdDsKLStzdHJ1Y3Qg ZXZwX2NpcGhlcl9zdDsKLStzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3Q7Ci0rCi0raW50IEZJUFNf bW9kZV9zZXQoaW50IG9ub2ZmKTsKLStpbnQgRklQU19tb2RlKHZvaWQpOwotK2NvbnN0IHZvaWQg KkZJUFNfcmFuZF9jaGVjayh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCk7 Ci0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3No YTEodm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lkKTsKLSt2b2lkIEZJUFNfY29y cnVwdF9hZXModm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfYWVzKHZvaWQpOwotK3ZvaWQgRklQ U19jb3JydXB0X2Rlcyh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Ci0rdm9p ZCBGSVBTX2NvcnJ1cHRfcnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4o dm9pZCk7Ci0raW50IEZJUFNfc2VsZnRlc3RfcnNhKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0 X2RzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBG SVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Ci0r dm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7 Ci0raW50IEZJUFNfc2VsZnRlc3RfaG1hYyh2b2lkKTsKLSsKLStpbnQgZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHN0cnVjdCBldnBfcGtleV9zdCAqcGtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBj aGFyICp0YnMsIGludCB0YnNsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNp Z25lZCBpbnQga2F0bGVuLAotKwkJCWNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwgdW5z aWduZWQgaW50IG1kX2ZsYWdzLAotKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKLSsKLStpbnQg Zmlwc19jaXBoZXJfdGVzdChzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKLSsJCQljb25z dCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqY2lwaGVyLAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KmtleSwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKLSsJCQljb25zdCB1bnNpZ25lZCBj aGFyICpwbGFpbnRleHQsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKLSsJ CQlpbnQgbGVuKTsKLSsKLSsvKiBCRUdJTiBFUlJPUiBDT0RFUyAqLwotKy8qIFRoZSBmb2xsb3dp bmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBj aGFuZ2VzCi0rICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVu IHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCi0rICovCi0rdm9pZCBFUlJfbG9hZF9GSVBTX3N0cmlu Z3Modm9pZCk7Ci0rCi0rLyogRXJyb3IgY29kZXMgZm9yIHRoZSBGSVBTIGZ1bmN0aW9ucy4gKi8K LSsKLSsvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsjZGVmaW5lIEZJUFNfRl9ESF9CVUlMVElOX0dF TlBBUkFNUwkJCSAxMDAKLSsjZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAx MDEKLSsjZGVmaW5lIEZJUFNfRl9EU0FfRE9fU0lHTgkJCQkgMTAyCi0rI2RlZmluZSBGSVBTX0Zf RFNBX0RPX1ZFUklGWQkJCQkgMTAzCi0rI2RlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgJ CQkgMTI0Ci0rI2RlZmluZSBGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgJCQkgMTI1Ci0rI2RlZmlu ZSBGSVBTX0ZfRklQU19DSEVDS19EU0EJCQkJIDEwNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hF Q0tfSU5DT1JFX0ZJTkdFUlBSSU5UCQkgMTA1Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19S U0EJCQkJIDEwNgotKyNkZWZpbmUgRklQU19GX0ZJUFNfRFNBX0NIRUNLCQkJCSAxMDcKLSsjZGVm aW5lIEZJUFNfRl9GSVBTX01PREVfU0VUCQkJCSAxMDgKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX1BL RVlfU0lHTkFUVVJFX1RFU1QJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9B RVMJCQkgMTEwCi0rI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMJCQkgMTExCi0rI2Rl ZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EJCQkgMTEyCi0rI2RlZmluZSBGSVBTX0ZfRklQ U19TRUxGVEVTVF9ITUFDCQkJIDExMwotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5H CQkJIDExNAotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMQkJCSAxMTUKLSsjZGVm aW5lIEZJUFNfRl9IQVNIX0ZJTkFMCQkJCSAxMjMKLSsjZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJ Tl9LRVlHRU4JCQkgMTE2Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQJ CQkgMTE3Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQJCQkgMTE4Ci0r I2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVAkJCSAxMTkKLSsjZGVmaW5lIEZJ UFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUCQkJIDEyMAotKyNkZWZpbmUgRklQU19GX1JTQV9Y OTMxX0dFTkVSQVRFX0tFWV9FWAkJCSAxMjEKLSsjZGVmaW5lIEZJUFNfRl9TU0xFQVlfUkFORF9C WVRFUwkJCSAxMjIKLSsKLSsvKiBSZWFzb24gY29kZXMuICovCi0rI2RlZmluZSBGSVBTX1JfQ0FO Tk9UX1JFQURfRVhFCQkJCSAxMDMKLSsjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElH RVNUCQkJIDEwNAotKyNkZWZpbmUgRklQU19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJCQkgMTE0 Ci0rI2RlZmluZSBGSVBTX1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSAkJIDEwNQotKyNkZWZp bmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENICQkgMTEwCi0rI2RlZmluZSBGSVBT X1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKLSsjZGVm aW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HIDEx MgotKyNkZWZpbmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVAkJCSAxMDIKLSsjZGVmaW5l IEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRAkJCSAxMDYKLSsjZGVmaW5lIEZJUFNfUl9JTlZB TElEX0tFWV9MRU5HVEgJCQkgMTA5Ci0rI2RlZmluZSBGSVBTX1JfS0VZX1RPT19TSE9SVAkJCQkg MTA4Ci0rI2RlZmluZSBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDAKLSsjZGVmaW5lIEZJ UFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRAkJCSAxMDcKLSsjZGVmaW5lIEZJUFNfUl9SU0FfREVD UllQVF9FUlJPUgkJCSAxMTUKLSsjZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkJCSAx MTYKLSsjZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQJCQkJIDEwMQotKyNkZWZpbmUgRklQ U19SX1RFU1RfRkFJTFVSRQkJCQkgMTE3Ci0rI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExB VEZPUk0JCQkgMTEzCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3Nl bGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfaG1hY19z ZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX2htYWNf c2VsZnRlc3QuYy5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwkyMDEw LTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwxMzcgQEAKLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotK3R5cGVkZWYgc3RydWN0IHsKLSsJY29uc3QgRVZQX01EICooKmFsZyko dm9pZCk7Ci0rCWNvbnN0IGNoYXIgKmtleSwgKml2OwotKwl1bnNpZ25lZCBjaGFyIGthdmFsW0VW UF9NQVhfTURfU0laRV07Ci0rfSBITUFDX0tBVDsKLSsKLStzdGF0aWMgY29uc3QgSE1BQ19LQVQg dmVjdG9yW10gPSB7Ci0rICAgIHsJRVZQX3NoYTEsCi0rCS8qIGZyb20gaHR0cDovL2NzcmMubmlz dC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9maXBzLTE5OGEucGRmICovCi0rCSIwMTIz NDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7IDB4MDksMHgyMiwweGQzLDB4 NDAsMHg1ZiwweGFhLDB4M2QsMHgxOSwKLSsJICAweDRmLDB4ODIsMHhhNCwweDU4LDB4MzAsMHg3 MywweDdkLDB4NWMsCi0rCSAgMHhjNiwweGM3LDB4NWQsMHgyNCB9Ci0rICAgIH0sCi0rICAgIHsJ RVZQX3NoYTIyNCwKLSsJLyoganVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJvdmUuLi4gKi8KLSsJ IjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHhkZCwweGVmLDB4 MGEsMHg0MCwweGNiLDB4N2QsMHg1MCwweGZiLAotKwkgIDB4NmUsMHhlNiwweGNlLDB4YTEsMHgy MCwweGJhLDB4MjYsMHhhYSwKLSsJICAweDA4LDB4ZjMsMHgwNywweDc1LDB4ODcsMHhiOCwweGFk LDB4MWIsCi0rCSAgMHg4YywweDhkLDB4MTIsMHhjNyB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3No YTI1NiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHhi OCwweGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEsMHg0MywweDA5LAotKwkgIDB4Y2EsMHg0ZSwweGE5 LDB4MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwKLSsJICAweGY3LDB4MWYsMHhiZSwweDkxLDB4NzQs MHhhMiwweDYxLDB4MzgsCi0rCSAgMHgwZCwweGMxLDB4N2UsMHhhZSwweDZhLDB4MzQsMHg1MSww eGQ5IH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhMzg0LAotKwkiMDEyMzQ1Njc4OTo7PD0+P0BB QkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweDA4LDB4YmMsMHhiMCwweGRhLDB4NDksMHgxZSww eDg3LDB4YWQsCi0rCSAgMHg5YSwweDFkLDB4NmEsMHhjZSwweDIzLDB4YzUsMHgwYiwweGY2LAot KwkgIDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3NywweGNkLDB4NDksMHgwNCwKLSsJICAweDg5LDB4 ZjEsMHhlNiwweDIzLDB4NDQsMHg1MSwweDUxLDB4OWYsCi0rCSAgMHg4NSwweDU2LDB4ODAsMHg3 OSwweDBjLDB4YmQsMHg0ZCwweDUwLAotKwkgIDB4YTQsMHg1ZiwweDI5LDB4ZTMsMHg5MywweGYw LDB4ZTgsMHg3ZiB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTUxMiwKLSsJIjAxMjM0NTY3ODk6 Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHg4MCwweDlkLDB4NDQsMHgwNSwweDdj LDB4NWIsMHg5NSwweDQxLAotKwkgIDB4MDUsMHhiZCwweDA0LDB4MTMsMHgxNiwweGRiLDB4MGYs MHhhYywKLSsJICAweDQ0LDB4ZDUsMHhhNCwweGQ1LDB4ZDAsMHg4OSwweDJiLDB4ZDAsCi0rCSAg MHg0ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4OTAsMHg3NywweDY4LAotKwkgIDB4ZjEsMHg4Nyww eGI3LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgyZiwKLSsJICAweDIxLDB4YTUsMHhiNSwweDY1LDB4 OWEsMHg0ZiwweDRiLDB4YTcsCi0rCSAgMHg0NywweDAyLDB4YTMsMHhkZSwweDliLDB4NTEsMHhm MSwweDQ1LAotKwkgIDB4YmQsMHg0ZiwweDI1LDB4MjcsMHg0MiwweDk4LDB4OTksMHgwNSB9Ci0r ICAgIH0sCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9obWFjKCkKLSsgICAgewotKyAgICBp bnQgbjsKLSsgICAgdW5zaWduZWQgaW50ICAgIG91dGxlbjsKLSsgICAgdW5zaWduZWQgY2hhciAg IG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICBjb25zdCBFVlBfTUQgICAqbWQ7Ci0rICAgIGNv bnN0IEhNQUNfS0FUICp0OwotKwotKyAgICBmb3Iobj0wLHQ9dmVjdG9yOyBuPHNpemVvZih2ZWN0 b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQotKwl7Ci0rCW1kID0gKCp0LT5hbGcpKCk7 Ci0rCUhNQUMobWQsdC0+a2V5LHN0cmxlbih0LT5rZXkpLAotKwkJKGNvbnN0IHVuc2lnbmVkIGNo YXIgKil0LT5pdixzdHJsZW4odC0+aXYpLAotKwkJb3V0LCZvdXRsZW4pOwotKwotKwlpZihtZW1j bXAob3V0LHQtPmthdmFsLG91dGxlbikpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX0hNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4g MDsKLSsJICAgIH0KLSsJfQotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAxMC0wMi0xNiAyMjo1ODozMS4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNf cmFuZC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDQx MiBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKy8qCi0rICogVGhpcyBpcyBhIEZJ UFMgYXBwcm92ZWQgQUVTIFBSTkcgYmFzZWQgb24gQU5TSSBYOS4zMSBBLjIuNC4KLSsgKi8KLSsK LSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKy8qIElmIHdlIGRvbid0IGRlZmluZSBfWE9QRU5fU09V UkNFX0VYVEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24ndAotKyAgIGJlIGRlZmluZWQgYW5kIGdl dHRpbWVvZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdpdGggc3RyaWN0IGNvbXBpbGVycwotKyAg IGxpa2UgREVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLwotKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9F WFRFTkRFRAotKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCi0rI2VuZGlmCi0rCi0r I2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgot KyNpZm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsjaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSsjZW5k aWYKLSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyMg aWZkZWYgT1BFTlNTTF9VTklTVEQKLSsjICBpbmNsdWRlIE9QRU5TU0xfVU5JU1RECi0rIyBlbHNl Ci0rIyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0rIyBlbmRpZgotKyNlbmRpZgotKyNpbmNsdWRlIDxz dHJpbmcuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNlbmRpZgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCi0rdm9pZCAqT1BFTlNTTF9zdGRlcnIodm9pZCk7Ci0rCi0rI2RlZmluZSBBRVNfQkxP Q0tfTEVOR1RICTE2Ci0rCi0rCi0rLyogQUVTIEZJUFMgUFJORyBpbXBsZW1lbnRhdGlvbiAqLwot KwotK3R5cGVkZWYgc3RydWN0IAotKwl7Ci0rCWludCBzZWVkZWQ7Ci0rCWludCBrZXllZDsKLSsJ aW50IHRlc3RfbW9kZTsKLSsJaW50IHNlY29uZDsKLSsJaW50IGVycm9yOwotKwl1bnNpZ25lZCBs b25nIGNvdW50ZXI7Ci0rCUFFU19LRVkga3M7Ci0rCWludCB2cG9zOwotKwkvKiBUZW1wb3Jhcnkg c3RvcmFnZSBmb3Iga2V5IGlmIGl0IGVxdWFscyBzZWVkIGxlbmd0aCAqLwotKwl1bnNpZ25lZCBj aGFyIHRtcF9rZXlbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgVltBRVNfQkxP Q0tfTEVOR1RIXTsKLSsJdW5zaWduZWQgY2hhciBEVFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJdW5z aWduZWQgY2hhciBsYXN0W0FFU19CTE9DS19MRU5HVEhdOwotKwl9IEZJUFNfUFJOR19DVFg7Ci0r Ci0rc3RhdGljIEZJUFNfUFJOR19DVFggc2N0eDsKLSsKLStzdGF0aWMgaW50IGZpcHNfcHJuZ19m YWlsID0gMDsKLSsKLSt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpCi0rCXsKLSsJZmlwc19wcm5n X2ZhaWwgPSAxOwotKwl9Ci0rCi0rdm9pZCBmaXBzX3JhbmRfcHJuZ19yZXNldChGSVBTX1BSTkdf Q1RYICpjdHgpCi0rCXsKLSsJY3R4LT5zZWVkZWQgPSAwOwotKwljdHgtPmtleWVkID0gMDsKLSsJ Y3R4LT50ZXN0X21vZGUgPSAwOwotKwljdHgtPmNvdW50ZXIgPSAwOwotKwljdHgtPnNlY29uZCA9 IDA7Ci0rCWN0eC0+ZXJyb3IgPSAwOwotKwljdHgtPnZwb3MgPSAwOwotKwlPUEVOU1NMX2NsZWFu c2UoY3R4LT5WLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJT1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtz LCBzaXplb2YoQUVTX0tFWSkpOwotKwl9Ci0rCQotKwotK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJu Z19rZXkoRklQU19QUk5HX0NUWCAqY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwg RklQU19SQU5EX1NJWkVfVCBrZXlsZW4pCi0rCXsKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwot KwlpZiAoa2V5bGVuICE9IDE2ICYmIGtleWxlbiAhPSAyNCAmJiBrZXlsZW4gIT0gMzIpCi0rCQl7 Ci0rCQkvKiBlcnJvcjogaW52YWxpZCBrZXkgc2l6ZSAqLwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r CUFFU19zZXRfZW5jcnlwdF9rZXkoa2V5LCBrZXlsZW4gPDwgMywgJmN0eC0+a3MpOwotKwlpZiAo a2V5bGVuID09IDE2KQotKwkJewotKwkJbWVtY3B5KGN0eC0+dG1wX2tleSwga2V5LCAxNik7Ci0r CQljdHgtPmtleWVkID0gMjsKLSsJCX0KLSsJZWxzZQotKwkJY3R4LT5rZXllZCA9IDE7Ci0rCWN0 eC0+c2VlZGVkID0gMDsKLSsJY3R4LT5zZWNvbmQgPSAwOwotKwlyZXR1cm4gMTsKLSsJfQotKwot K3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19zZWVkKEZJUFNfUFJOR19DVFggKmN0eCwKLSsJCQlj b25zdCB1bnNpZ25lZCBjaGFyICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCi0rCXsK LSsJaW50IGk7Ci0rCWlmICghY3R4LT5rZXllZCkKLSsJCXJldHVybiAwOwotKwkvKiBJbiB0ZXN0 IG1vZGUgc2VlZCBpcyBqdXN0IHN1cHBsaWVkIGRhdGEgKi8KLSsJaWYgKGN0eC0+dGVzdF9tb2Rl KQotKwkJewotKwkJaWYgKHNlZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsJCQlyZXR1cm4g MDsKLSsJCW1lbWNweShjdHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJY3R4LT5z ZWVkZWQgPSAxOwotKwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCS8qIE91dHNpZGUgdGVzdCBtb2RlIFhP UiBzdXBwbGllZCBkYXRhIHdpdGggZXhpc3Rpbmcgc2VlZCAqLwotKwlmb3IgKGkgPSAwOyBpIDwg c2VlZGxlbjsgaSsrKQotKwkJewotKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOwot KwkJaWYgKGN0eC0+dnBvcyA9PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJCQljdHgtPnZw b3MgPSAwOwotKwkJCS8qIFNwZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3Ro IGVxdWFscwotKyAJCQkgKiBibG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0 Y2guCi0rIAkJCSAqLyAKLSsJCQlpZiAoY3R4LT5rZXllZCA9PSAyKQotKwkJCQl7Ci0rCQkJCWlm ICghbWVtY21wKGN0eC0+dG1wX2tleSwgY3R4LT5WLCAxNikpCi0rCQkJCQl7Ci0rCQkJCQlSQU5E ZXJyKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQsCi0rCQkJCQkJUkFORF9SX1BSTkdfU0VFRF9N VVNUX05PVF9NQVRDSF9LRVkpOwotKwkJCQkJcmV0dXJuIDA7Ci0rCQkJCQl9Ci0rCQkJCU9QRU5T U0xfY2xlYW5zZShjdHgtPnRtcF9rZXksIDE2KTsKLSsJCQkJY3R4LT5rZXllZCA9IDE7Ci0rCQkJ CX0KLSsJCQljdHgtPnNlZWRlZCA9IDE7Ci0rCQkJfQotKwkJfQotKwlyZXR1cm4gMTsKLSsJfQot KwotK2ludCBmaXBzX3NldF90ZXN0X21vZGUoRklQU19QUk5HX0NUWCAqY3R4KQotKwl7Ci0rCWlm IChjdHgtPmtleWVkKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RF LFJBTkRfUl9QUk5HX0tFWUVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwljdHgtPnRlc3RfbW9k ZSA9IDE7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9p ZCkKLSsJewotKwlyZXR1cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKLSsJfQotKwotK2lu dCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KQotKwl7Ci0rCWlmICghc2N0eC50 ZXN0X21vZGUpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RULFJBTkRf Ul9OT1RfSU5fVEVTVF9NT0RFKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwltZW1jcHkoc2N0eC5E VCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0YXRpYyB2 b2lkIGZpcHNfZ2V0X2R0KEZJUFNfUFJOR19DVFggKmN0eCkKLSsgICAgewotKyNpZmRlZiBPUEVO U1NMX1NZU19XSU4zMgotKwlGSUxFVElNRSBmdDsKLSsjZWxzZQotKwlzdHJ1Y3QgdGltZXZhbCB0 djsKLSsjZW5kaWYKLSsJdW5zaWduZWQgY2hhciAqYnVmID0gY3R4LT5EVDsKLSsKLSsjaWZuZGVm IEdFVFBJRF9JU19NRUFOSU5HTEVTUwotKwl1bnNpZ25lZCBsb25nIHBpZDsKLSsjZW5kaWYKLSsK LSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0 KTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0hpZ2hEYXRlVGltZSAmIDB4ZmYp OwotKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiA4KSAm IDB4ZmYpOwotKwlidWZbMl0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+ PiAxNikgJiAweGZmKTsKLSsJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0 ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdM b3dEYXRlVGltZSAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xv d0RhdGVUaW1lID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0 LmR3TG93RGF0ZVRpbWUgPj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFy KSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gMjQpICYgMHhmZik7Ci0rI2Vsc2UKLSsJZ2V0dGltZW9m ZGF5KCZ0dixOVUxMKTsKLSsJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl9zZWMgJiAw eGZmKTsKLSsJYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDgpICYgMHhm Zik7Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAxNikgJiAweGZm KTsKLSsJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDI0KSAmIDB4ZmYp OwotKwlidWZbNF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3VzZWMgJiAweGZmKTsKLSsJYnVm WzVdID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfdXNlYyA+PiA4KSAmIDB4ZmYpOwotKwlidWZb Nl0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZb N10gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOwotKyNlbmRp ZgotKwlidWZbOF0gPSAodW5zaWduZWQgY2hhcikgKGN0eC0+Y291bnRlciAmIDB4ZmYpOwotKwli dWZbOV0gPSAodW5zaWduZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gOCkgJiAweGZmKTsKLSsJ YnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiAxNikgJiAweGZmKTsK LSsJYnVmWzExXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiAyNCkgJiAweGZm KTsKLSsKLSsJY3R4LT5jb3VudGVyKys7Ci0rCi0rCi0rI2lmbmRlZiBHRVRQSURfSVNfTUVBTklO R0xFU1MKLSsJcGlkPSh1bnNpZ25lZCBsb25nKWdldHBpZCgpOwotKwlidWZbMTJdID0gKHVuc2ln bmVkIGNoYXIpIChwaWQgJiAweGZmKTsKLSsJYnVmWzEzXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBp ZCA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTRdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDE2 KSAmIDB4ZmYpOwotKwlidWZbMTVdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDI0KSAmIDB4 ZmYpOwotKyNlbmRpZgotKyAgICB9Ci0rCi0rc3RhdGljIGludCBmaXBzX3JhbmQoRklQU19QUk5H X0NUWCAqY3R4LAotKwkJCXVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRs ZW4pCi0rCXsKLSsJdW5zaWduZWQgY2hhciBSW0FFU19CTE9DS19MRU5HVEhdLCBJW0FFU19CTE9D S19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIHRtcFtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJaW50 IGk7Ci0rCWlmIChjdHgtPmVycm9yKQotKwkJewotKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5E LFJBTkRfUl9QUk5HX0VSUk9SKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoIWN0eC0+a2V5 ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX05PX0tFWV9TRVQp OwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWlmICghY3R4LT5zZWVkZWQpCi0rCQl7Ci0rCQlSQU5E ZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfTk9UX1NFRURFRCk7Ci0rCQlyZXR1cm4g MDsKLSsJCX0KLSsJZm9yICg7OykKLSsJCXsKLSsJCWlmICghY3R4LT50ZXN0X21vZGUpCi0rCQkJ Zmlwc19nZXRfZHQoY3R4KTsKLSsJCUFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsK LSsJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCi0rCQkJdG1wW2ldID0g SVtpXSBeIGN0eC0+VltpXTsKLSsJCUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOwotKwkJ Zm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsJCQl0bXBbaV0gPSBSW2ld IF4gSVtpXTsKLSsJCUFFU19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7Ci0rCQkvKiBD b250aW51b3VzIFBSTkcgdGVzdCAqLwotKwkJaWYgKGN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQlp ZiAoZmlwc19wcm5nX2ZhaWwpCi0rCQkJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19M RU5HVEgpOwotKwkJCWlmICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkp Ci0rCQkJCXsKLSsJICAgIAkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19T VFVDSyk7Ci0rCQkJCWN0eC0+ZXJyb3IgPSAxOwotKwkJCQlmaXBzX3NldF9zZWxmdGVzdF9mYWls KCk7Ci0rCQkJCXJldHVybiAwOwotKwkJCQl9Ci0rCQkJfQotKwkJbWVtY3B5KGN0eC0+bGFzdCwg UiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQlpZiAoIWN0eC0+c2Vjb25kKQotKwkJCXsKLSsJCQlj dHgtPnNlY29uZCA9IDE7Ci0rCQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKLSsJCQkJY29udGludWU7 Ci0rCQkJfQotKwotKwkJaWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKQotKwkJCXsKLSsJ CQltZW1jcHkob3V0LCBSLCBvdXRsZW4pOwotKwkJCWJyZWFrOwotKwkJCX0KLSsKLSsJCW1lbWNw eShvdXQsIFIsIEFFU19CTE9DS19MRU5HVEgpOwotKwkJb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7 Ci0rCQlvdXRsZW4gLT0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0K LSsKLSsKLStpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBG SVBTX1JBTkRfU0laRV9UIGtleWxlbikKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fd19sb2Nr KENSWVBUT19MT0NLX1JBTkQpOwotKwlyZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5 LCBrZXlsZW4pOwotKwlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldHVy biByZXQ7Ci0rCX0KLSsKLStpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQ U19SQU5EX1NJWkVfVCBzZWVkbGVuKQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193X2xvY2so Q1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2Vl ZCwgc2VlZGxlbik7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0 dXJuIHJldDsKLSsJfQotKwotKwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAq b3V0LCBGSVBTX1JBTkRfU0laRV9UIGNvdW50KQotKwl7Ci0rCWludCByZXQ7Ci0rCUNSWVBUT193 X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNfcmFuZCgmc2N0eCwgb3V0LCBj b3VudCk7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJl dDsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpCi0rCXsKLSsJaW50IHJldDsK LSsJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gc2N0eC5zZWVkZWQ7 Ci0rCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJ fQotKwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpCi0rCXsKLSsJQ1JZUFRPX3dfbG9jayhD UllQVE9fTE9DS19SQU5EKTsKLSsJZmlwc19yYW5kX3BybmdfcmVzZXQoJnNjdHgpOwotKwlDUllQ VE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBz X2RvX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4p Ci0rCXsKLSsJRklQU19yYW5kX3NlZWQoc2VlZCwgc2VlZGxlbik7Ci0rCX0KLSsKLStzdGF0aWMg dm9pZCBmaXBzX2RvX3JhbmRfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qg c2VlZGxlbiwKLSsJCQkJCWRvdWJsZSBhZGRfZW50cm9weSkKLSsJewotKwlGSVBTX3JhbmRfc2Vl ZChzZWVkLCBzZWVkbGVuKTsKLSsJfQotKwotK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5k X2ZpcHNfbWV0aD0KLSsgICAgewotKyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKLSsgICAgRklQU19y YW5kX2J5dGVzLAotKyAgICBGSVBTX3JhbmRfcmVzZXQsCi0rICAgIGZpcHNfZG9fcmFuZF9hZGQs Ci0rICAgIEZJUFNfcmFuZF9ieXRlcywKLSsgICAgRklQU19yYW5kX3N0YXR1cwotKyAgICB9Owot KwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCi0rewotKyAgcmV0 dXJuICZyYW5kX2ZpcHNfbWV0aDsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmguZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgJMjAxMC0w Mi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNzcgQEAKLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0r ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAotKyNkZWZp bmUgSEVBREVSX0ZJUFNfUkFORF9ICi0rCi0rI2luY2x1ZGUgImRlcy5oIgotKwotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rI2Vu ZGlmCi0rCi0raW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwg RklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOwotK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lk ICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKLStpbnQgRklQU19yYW5kX2J5dGVzKHVuc2ln bmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pOwotKwotK2ludCBGSVBTX3Jh bmRfdGVzdF9tb2RlKHZvaWQpOwotK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpOwotK2ludCBG SVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKLSsKLStpbnQgRklQU19yYW5kX3N0 YXR1cyh2b2lkKTsKLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lk KTsKLSsKLSsjaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyNlbmRpZgotKyNlbmRpZgotKyNlbmRp ZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2Vs ZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3Nl bGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9z ZWxmdGVzdC5jLmZpcHMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIwMTAt MDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDM3MyBAQAotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rCi0rCi0r dHlwZWRlZiBzdHJ1Y3QKLSsJewotKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKLSsJdW5zaWduZWQg Y2hhciBWWzE2XTsKLSsJdW5zaWduZWQgY2hhciBSWzE2XTsKLSsJfSBBRVNfUFJOR19UVjsKLSsK LSsvKiBUaGUgZm9sbG93aW5nIHRlc3QgdmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0 aGUgUkdOVlMgc3BlYyAqLwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2 XSA9Ci0rCQl7MHhmMywweGIxLDB4NjYsMHg2ZCwweDEzLDB4NjAsMHg3MiwweDQyLAotKwkJIDB4 ZWQsMHgwNiwweDFjLDB4YWIsMHhiOCwweGQ0LDB4NjIsMHgwMn07Ci0rCi0rc3RhdGljIEFFU19Q Uk5HX1RWIGFlc18xMjhfdHZbXSA9IHsKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhi MywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZi LDB4YjAsMHhlOSwweDIyLDB4Zjl9LAotKwkJCQkvKiBWICovCi0rCQl7MHg4MCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDU5LDB4NTMsMHgxZSwweGQxLDB4 M2IsMHhiMCwweGMwLDB4NTUsCi0rCQkgMHg4NCwweDc5LDB4NjYsMHg4NSwweGMxLDB4MmYsMHg3 NiwweDQxfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3 OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5 LDB4MjIsMHhmYX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4N2MsMHgyMiwweDJjLDB4ZjQsMHhjYSwweDhmLDB4 YTIsMHg0YywKLSsJCSAweDFjLDB4OWMsMHhiNiwweDQxLDB4YTksMHhmMywweDIyLDB4MGR9Ci0r CX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgy MywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZi fSwKLSsJCQkJLyogViAqLwotKwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJ CQkvKiBSICovCi0rCQl7MHg4YSwweGFhLDB4MDAsMHgzOSwweDY2LDB4NjcsMHg1YiwweGU1LAot KwkJIDB4MjksMHgxNCwweDI4LDB4ODEsMHhhOSwweDRkLDB4NGUsMHhjN30KLSsJfSwKLSsJewot KwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2 MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmN9LAotKwkJCQkv KiBWICovCi0rCQl7MHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJ IDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8K LSsJCXsweDg4LDB4ZGQsMHhhNCwweDU2LDB4MzAsMHgyNCwweDIzLDB4ZTUsCi0rCQkgMHhmNiww eDlkLDB4YTUsMHg3ZSwweDdiLDB4OTUsMHhjNywweDNhfQotKwl9LAotKwl7Ci0rCQkJCS8qIERU ICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4 ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmZH0sCi0rCQkJCS8qIFYgKi8KLSsJ CXsweGY4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MDUs MHgyNSwweDkyLDB4NDYsMHg2MSwweDc5LDB4ZDIsMHhjYiwKLSsJCSAweDc4LDB4YzQsMHgwYiww eDE0LDB4MGEsMHg1YSwweDlhLDB4Yzh9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsw eGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4 NGEsMHhmYiwweGIwLDB4ZTksMHgyMywweDc3fSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmV9LAotKwkJCQkvKiBSICovCi0rCQl7MHgwZCwweGQ1LDB4YTAs MHgzNiwweDdhLDB4NTksMHgyNiwweGJjLAotKwkJIDB4NDgsMHhkOSwweDM4LDB4YmYsMHhmMCww eDg1LDB4OGYsMHhlYX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMyww eGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4 YjAsMHhlOSwweDIzLDB4Nzh9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZn0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweGFlLDB4NTMsMHg4NywweGVlLDB4OGMs MHhkOSwweDEyLDB4ZjUsCi0rCQkgMHg3MywweDUzLDB4YWUsMHgwMywweGY5LDB4ZDUsMHgxMyww eDMzfQotKwl9LAotK307Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9rZXlbMjRd ID0KLSsJCXsweDE1LDB4ZDgsMHg3OCwweDBkLDB4NjIsMHhkMywweDI1LDB4NmUsCi0rCQkgMHg0 NCwweDY0LDB4MTAsMHgxMywweDYwLDB4MmIsMHhhOSwweGJjLAotKwkJIDB4NGEsMHhmYiwweGNh LDB4ZWIsMHg0YywweDhiLDB4OTksMHgzYn07Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RWIGFlc18x OTJfdHZbXSA9IHsKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgs MHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCww eGYzLDB4NGJ9LAotKwkJCQkvKiBWICovCi0rCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDE3LDB4MDcsMHhkNSwweDI4LDB4MTksMHg3OSwweDFl LDB4ZWYsCi0rCQkgMHhhNSwweDBjLDB4YmYsMHgyNSwweGU1LDB4NTYsMHhiNCwweDkzfQotKwl9 LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4Njks MHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Y30s Ci0rCQkJCS8qIFYgKi8KLSsJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJ LyogUiAqLwotKwkJezB4OTIsMHg4ZCwweGJlLDB4MDcsMHhkZCwweGM3LDB4NTgsMHhjMCwKLSsJ CSAweDZmLDB4MzUsMHg0MSwweDliLDB4MTcsMHhjOSwweGJkLDB4OWJ9Ci0rCX0sCi0rCXsKLSsJ CQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEs Ci0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRkfSwKLSsJCQkJLyog ViAqLwotKwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAw eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0r CQl7MHhkNSwweGRlLDB4ZjQsMHg1MCwweGYzLDB4YjcsMHgxMCwweDRlLAotKwkJIDB4YjgsMHhj NiwweGY4LDB4Y2YsMHhlMiwweGIxLDB4Y2EsMHhhMn0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAq LwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJm LDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGV9LAotKwkJCQkvKiBWICovCi0rCQl7 MHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweGNlLDB4 MjksMHgwOCwweDQzLDB4ZmMsMHgzNCwweDQxLDB4ZTcsCi0rCQkgMHg0NywweDhmLDB4YjMsMHg2 NiwweDJiLDB4NDYsMHhiMSwweGJifQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgz ZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdk LDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Zn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGY4LDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4YjMsMHgyNiwweDBmLDB4 ZjUsMHhkNiwweGNhLDB4YTgsMHhiZiwKLSsJCSAweDg5LDB4YjgsMHg1ZSwweDJmLDB4MjIsMHg1 NiwweDkyLDB4MmZ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhm ZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0 LDB4NzgsMHhmMywweGM5fSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmV9LAotKwkJCQkvKiBSICovCi0rCQl7MHgwNSwweGViLDB4MTgsMHg1MiwweDM0LDB4 NDMsMHgwMCwweDQzLAotKwkJIDB4NmUsMHg1YSwweGE1LDB4ZmUsMHg3YiwweDMyLDB4YzQsMHgy ZH0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4 MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYz LDB4Y2F9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLAotKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0s Ci0rCQkJCS8qIFIgKi8KLSsJCXsweDE1LDB4M2MsMHhlOCwweGQxLDB4MDQsMHhjNywweGFkLDB4 NTAsCi0rCQkgMHgwYiwweGYwLDB4MDcsMHgxNiwweGU3LDB4NTYsMHg3YSwweGVhfQotKwl9LAot K307Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlbMzJdID0KLSsJCXsweDZk LDB4MTQsMHgwNiwweDZjLDB4YjYsMHhkOCwweDIxLDB4MmQsCi0rCQkgMHg4MiwweDhkLDB4ZmEs MHhmMiwweDdhLDB4MDMsMHhiNywweDlmLAotKwkJIDB4MGMsMHhjNywweDNlLDB4Y2QsMHg3Niww eGViLDB4ZWUsMHhiNSwKLSsJCSAweDIxLDB4MDUsMHg4YywweDRmLDB4MzEsMHg3YSwweDgwLDB4 YmJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2X3R2W10gPSB7Ci0rCXsKLSsJCQkJ LyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0r CQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg4fSwKLSsJCQkJLyogViAq LwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7 MHgzNSwweGM3LDB4ZWYsMHhhNywweDc4LDB4NGQsMHgyOSwweGJjLAotKwkJIDB4ODIsMHg3OSww eDk5LDB4ZmIsMHhkMCwweGIzLDB4M2IsMHg3Mn0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwot KwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4 YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODl9LAotKwkJCQkvKiBWICovCi0rCQl7MHhj MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDZjLDB4ZjQs MHg0MiwweDVkLDB4YzcsMHgwNCwweDFhLDB4NDEsCi0rCQkgMHgyOCwweDJhLDB4NzgsMHhhOSww eGIwLDB4MTIsMHhjNCwweDk1fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSww eDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4 MzQsMHg3NCwweDhlLDB4OWUsMHg4YX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGUwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MTYsMHg5MCwweGE0LDB4ZmYs MHg3YiwweDdlLDB4YjksMHgzMCwKLSsJCSAweGRiLDB4NjcsMHg0YiwweGFjLDB4MmQsMHhlMSww eGQxLDB4NzV9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSww eGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4 OGUsMHg5ZSwweDhifSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHgxNCwweDZmLDB4ZjUsMHg5NSwweGExLDB4NDYs MHg2NSwweDMwLAotKwkJIDB4YmMsMHg1NywweGUyLDB4NGEsMHhmNywweDQ1LDB4NjIsMHgwNX0K LSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCww eGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4 OGN9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0r CQkJCS8qIFIgKi8KLSsJCXsweDk2LDB4ZTIsMHhiNCwweDFlLDB4NjYsMHg1ZSwweDBmLDB4YTQs Ci0rCQkgMHhjNSwweGNkLDB4YTIsMHgwNywweGNjLDB4YjcsMHg5NCwweDQwfQotKwl9LAotKwl7 Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCww eGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwNn0sCi0rCQkJ CS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0r CQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKLSsJCQkJLyogUiAq LwotKwkJezB4NjEsMHhjZSwweDFkLDB4NmEsMHg0OCwweDc1LDB4OTcsMHgyOCwKLSsJCSAweDRi LDB4NDEsMHhkZSwweDE4LDB4NDQsMHg0ZiwweDU2LDB4ZWN9Ci0rCX0sCi0rCXsKLSsJCQkJLyog RFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkg MHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZiwweDA3fSwKLSsJCQkJLyogViAqLwot KwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBSICovCi0rCQl7MHg1 MiwweDg5LDB4NTksMHg3OSwweDJkLDB4YWEsMHgyOCwweGIzLAotKwkJIDB4YjAsMHg4YSwweDNl LDB4NzAsMHhmYSwweDcxLDB4NTksMHg4NH0KLSsJfSwKLSt9OwotKwotKwotK3ZvaWQgRklQU19j b3JydXB0X3JuZygpCi0rICAgIHsKLSsgICAgYWVzXzE5Ml90dlswXS5WWzBdKys7Ci0rICAgIH0K LSsKLSsjZGVmaW5lIGZpcHNfcmFuZF90ZXN0KGtleSwgdHYpIFwKLSsJZG9fcmFuZF90ZXN0KGtl eSwgc2l6ZW9mIGtleSwgdHYsIHNpemVvZih0dikvc2l6ZW9mKEFFU19QUk5HX1RWKSkKLSsKLStz dGF0aWMgaW50IGRvX3JhbmRfdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sCi0r CQkJQUVTX1BSTkdfVFYgKnR2LCBpbnQgbnR2KQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl07 Ci0rCWludCBpOwotKwlpZiAoIUZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKSkKLSsJCXJl dHVybiAwOwotKwlmb3IgKGkgPSAwOyBpIDwgbnR2OyBpKyspCi0rCQl7Ci0rCQlGSVBTX3JhbmRf c2VlZCh0dltpXS5WLCAxNik7Ci0rCQlGSVBTX3JhbmRfc2V0X2R0KHR2W2ldLkRUKTsKLSsJCUZJ UFNfcmFuZF9ieXRlcyhSLCAxNik7Ci0rCQlpZiAobWVtY21wKFIsIHR2W2ldLlIsIDE2KSkKLSsJ CQlyZXR1cm4gMDsKLSsJCX0KLSsJcmV0dXJuIDE7Ci0rCX0KLSsJCi0rCi0raW50IEZJUFNfc2Vs ZnRlc3Rfcm5nKCkKLSsJewotKwlGSVBTX3JhbmRfcmVzZXQoKTsKLSsJaWYgKCFGSVBTX3JhbmRf dGVzdF9tb2RlKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORyxG SVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlpZiAoIWZpcHNf cmFuZF90ZXN0KGFlc18xMjhfa2V5LGFlc18xMjhfdHYpCi0rCQl8fCAhZmlwc19yYW5kX3Rlc3Qo YWVzXzE5Ml9rZXksIGFlc18xOTJfdHYpCi0rCQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzI1Nl9r ZXksIGFlc18yNTZfdHYpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9S TkcsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJRklQU19y YW5kX3Jlc2V0KCk7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMuZmlwcwkyMDEwLTAyLTE2IDIyOjU4 OjMxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kdGVzdC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAt MCwwICsxLDI0OCBAQAotKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVh eUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlz IHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlv dW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0 dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMg bGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMg bG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRo aXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRj LiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0r ICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1l IGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNv biAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMg WW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNv ZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGlu IGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBh cyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMg Y2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1 cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3 aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAg ICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsg KiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdj cnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGli cmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0p LgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEg ZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBw bGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAot KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ Q1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFN QUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFu eSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlz IGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJl Ci0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQot KyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCi0rICovCi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n Ci0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S Ci0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxp Yi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5j bHVkZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0raW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRc biIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNf dXRsLmgiCi0rCi0rdHlwZWRlZiBzdHJ1Y3QKLSsJewotKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsK LSsJdW5zaWduZWQgY2hhciBWWzE2XTsKLSsJdW5zaWduZWQgY2hhciBSWzE2XTsKLSsJfSBBRVNf UFJOR19NQ1Q7Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9tY3Rfa2V5WzE2XSA9 Ci0rCXsweDlmLDB4NWIsMHg1MSwweDIwLDB4MGIsMHhmMywweDM0LDB4YjUsCi0rCSAweGQ4LDB4 MmIsMHhlOCwweGMzLDB4NzIsMHg1NSwweGM4LDB4NDh9OwotKwotK3N0YXRpYyBBRVNfUFJOR19N Q1QgYWVzXzEyOF9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4NjMsMHg3NiwweGJiLDB4 ZTUsMHgyOSwweDAyLDB4YmEsMHgzYiwKLSsJIDB4NjcsMHhjOSwweDI1LDB4ZmEsMHg3MCwweDFm LDB4MTEsMHhhY30sCi0rCQkJLyogViAqLwotKwl7MHg1NywweDJjLDB4OGUsMHg3NiwweDg3LDB4 MjYsMHg0NywweDk3LAotKwkgMHg3ZSwweDc0LDB4ZmIsMHhkZCwweGM0LDB4OTUsMHgwMSwweGQx fSwKLSsJCQkvKiBSICovCi0rCXsweDQ4LDB4ZTksMHhiZCwweDBkLDB4MDYsMHhlZSwweDE4LDB4 ZmIsCi0rCSAweGU0LDB4NTcsMHg5MCwweGQ1LDB4YzMsMHhmYywweDliLDB4NzN9Ci0rfTsKLSsK LStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTkyX21jdF9rZXlbMjRdID0KLSsJezB4YjcsMHg2 YywweDM0LDB4ZDEsMHgwOSwweDY3LDB4YWIsMHg3MywKLSsJIDB4NGQsMHg1YSwweGQ1LDB4MzQs MHg5OCwweDE2LDB4MGIsMHg5MSwKLSsJIDB4YmMsMHgzNSwweDUxLDB4MTYsMHg2YiwweGFlLDB4 OTMsMHg4YX07Ci0rCi0rc3RhdGljIEFFU19QUk5HX01DVCBhZXNfMTkyX21jdF90diA9IHsKLSsJ CQkvKiBEVCAqLwotKwl7MHg4NCwweGNlLDB4MjIsMHg3ZCwweDkxLDB4NWEsMHhhMywweGM5LAot KwkgMHg4NCwweDNjLDB4MGEsMHhiMywweGE5LDB4NjMsMHgxNSwweDUyfSwKLSsJCQkvKiBWICov Ci0rCXsweGI2LDB4YWYsMHhlNiwweDhmLDB4OTksMHg5ZSwweDkwLDB4NjQsCi0rCSAweGRkLDB4 YzcsMHg3YSwweGMxLDB4YmIsMHg5MCwweDNhLDB4NmR9LAotKwkJCS8qIFIgKi8KLSsJezB4ZmMs MHg4NSwweDYwLDB4OWEsMHgyOSwweDZmLDB4ZWYsMHgyMSwKLSsJIDB4ZGQsMHg4NiwweDIwLDB4 MzIsMHg4YSwweDI5LDB4NmYsMHg0N30KLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbWN0X2tleVszMl0gPQotKwl7MHg5YiwweDA1LDB4YzgsMHg2OCwweGZmLDB4NDcsMHhm OCwweDNhLAotKwkgMHhhNiwweDNhLDB4YTgsMHhjYiwweDRlLDB4NzEsMHhiMiwweGUwLAotKwkg MHhiOCwweDdlLDB4ZjEsMHgzNywweGI2LDB4YjQsMHhmNiwweDZkLAotKwkgMHg4NiwweDMyLDB4 ZmMsMHgxZiwweDVlLDB4MWQsMHgxZSwweDUwfTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfTUNUIGFl c18yNTZfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsweDMxLDB4NmUsMHgzNSwweDlhLDB4 YjEsMHg0NCwweGYwLDB4ZWUsCi0rCSAweDYyLDB4NmQsMHgwNCwweDQ2LDB4ZTAsMHhhMywweDky LDB4NGN9LAotKwkJCS8qIFYgKi8KLSsJezB4NGYsMHhjZCwweGMxLDB4ODcsMHg4MiwweDFmLDB4 NGQsMHhhMSwKLSsJIDB4M2UsMHgwZSwweDU2LDB4NDQsMHg1OSwweGU4LDB4ODMsMHhjYX0sCi0r CQkJLyogUiAqLwotKwl7MHhjOCwweDg3LDB4YzIsMHg2MSwweDViLDB4ZDAsMHhiOSwweGUxLAot KwkgMHhlNywweGYzLDB4OGIsMHhkNywweDViLDB4ZDUsMHhmMSwweDhkfQotK307Ci0rCi0rc3Rh dGljIHZvaWQgZHVtcChjb25zdCB1bnNpZ25lZCBjaGFyICpiLGludCBuKQotKyAgICB7Ci0rICAg IHdoaWxlKG4tLSA+IDApCi0rCXsKLSsJcHJpbnRmKCIgJTAyeCIsKmIrKyk7Ci0rCX0KLSsgICAg fQotKwotK3N0YXRpYyB2b2lkIGNvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LGNv bnN0IHVuc2lnbmVkIGNoYXIgKmV4cGVjdGVkLAotKwkJICAgIGludCBuKQotKyAgICB7Ci0rICAg IGludCBpOwotKwotKyAgICBmb3IoaT0wIDsgaSA8IG4gOyArK2kpCi0rCWlmKHJlc3VsdFtpXSAh PSBleHBlY3RlZFtpXSkKLSsJICAgIHsKLSsJICAgIHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwg Z290OiIpOwotKwkgICAgZHVtcChyZXN1bHQsbik7Ci0rCSAgICBwdXRzKCJcbiAgICAgICAgICAg ICAgIGV4cGVjdGVkOiIpOwotKwkgICAgZHVtcChleHBlY3RlZCxuKTsKLSsJICAgIHB1dGNoYXIo J1xuJyk7Ci0rCSAgICBFWElUKDEpOwotKwkgICAgfQotKyAgICB9Ci0rCi0rCi0rc3RhdGljIHZv aWQgcnVuX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBBRVNfUFJOR19NQ1Qg KnR2KQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XSwgZHRbMTZdOwotKyAgICBp bnQgaSwgajsKLSsgICAgRklQU19yYW5kX3Jlc2V0KCk7Ci0rICAgIEZJUFNfcmFuZF90ZXN0X21v ZGUoKTsKLSsgICAgRklQU19yYW5kX3NldF9rZXkoa2V5LCBrZXlsZW4pOwotKyAgICBGSVBTX3Jh bmRfc2VlZCh0di0+ViwgMTYpOwotKyAgICBtZW1jcHkoZHQsIHR2LT5EVCwgMTYpOwotKyAgICBm b3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKLSsJewotKyAgICAJRklQU19yYW5kX3NldF9kdChk dCk7Ci0rCUZJUFNfcmFuZF9ieXRlcyhidWYsIDE2KTsKLSsJLyogSW5jcmVtZW50IERUICovCi0r CWZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKLSsJCXsKLSsJCWR0W2pdKys7Ci0rCQlpZiAoZHRb al0pCi0rCQkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsKLSsgICAgY29tcGFyZShidWYsdHYtPlIsIDE2 KTsKLSsgICAgfQotKwotK2ludCBtYWluKCkKLSsJewotKwlydW5fdGVzdChhZXNfMTI4X21jdF9r ZXksIDE2LCAmYWVzXzEyOF9tY3RfdHYpOwotKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9u ZVxuIik7Ci0rCXJ1bl90ZXN0KGFlc18xOTJfbWN0X2tleSwgMjQsICZhZXNfMTkyX21jdF90dik7 Ci0rCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25lXG4iKTsKLSsJcnVuX3Rlc3QoYWVzXzI1 Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVz dCAzIGRvbmVcbiIpOwotKwlyZXR1cm4gMDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMJMjAx MC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAw MDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNDQxIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv Ci0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5z c2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg bWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBw ZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Np b24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBv ZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNP RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBB TlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMg Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO Q0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAq IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO IElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoK LSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5k aWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25m Lmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG5b XSA9Ci0rIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4 MkJceDlEXHhBOFx4NzEiCi0rIlx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhBNFx4 NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFGXHgwM1x4 NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2XHhFRFx4 NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rIlx4 N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5XHgz QVx4MjUiCi0rIlx4ODRceEVFXHg2QVx4NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0XHhC Mlx4NDVceDQ1XHg5OFx4MzkiCi0rIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgx Rlx4NTJceDdBXHg5QVx4NDFceEY2XHhDMVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhD QVx4MkFceDhGXHg1OVx4NDZceEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0IiOwotKwot KwotK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQotKyAgICB7Ci0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgZFtdID0KLSsiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJceDg5 XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKLSsiXHhGOFx4M0ZceDMxXHgyNVx4MUVceDA2 XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKLSsiXHhCMlx4OTRceDEw XHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKLSsi XHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4Qzlc eDNFXHhEQSIKLSsiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNc eDc2XHhGMVx4QTlceDUyXHg5NCIKLSsiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlc eDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKLSsiXHg5M1x4OTlceDI2XHhFRFx4NEZc eDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKLSsiXHhBRlx4OTRc eDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhCMyIK LSsiXHhDMSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9Ci0rIlx4 MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEExXHhC NVx4NjAiCi0rIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgx QVx4OUVceDNEXHg4NFx4RjYiCi0rIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgz Qlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCi0rIlx4MkRceDVCXHgyNVx4MjFceDc2XHg0 NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCi0rIlx4OTkiOwotKwot KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotKyJceDAwXHhDOVx4N0ZceEIx XHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgotKyJceDM1 XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4OEJc eDlEIgotKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4QTNc eEI0XHgzMlx4MDRceEI1IgotKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVc eEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgotKyJceDAzIjsKLSsKLSsgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KLSsiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJBXHgw M1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKLSsiXHhFQlx4MDdceEREXHhE Q1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKLSsiXHhE OVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVceDlB XHgyRSIKLSsiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4QzlceDND XHgxRlx4NjdceEM5XHg4MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRt cTFbXSA9Ci0rIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhG OFx4NzhceDg2XHg0Q1x4QTkiCi0rIlx4NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFDXHg1 Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCi0rIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4 QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCi0rIlx4MUJceDk5XHhB NFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOwot KyAgICAKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KLSsiXHgwMFx4 QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0XHgy MyIKLSsiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdGXHhD RFx4MzlceEUyXHgxMSIKLSsiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIxXHg2 N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKLSsiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2XHg5 OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKLSsiXHhGNyI7Ci0rCi0rICAg IGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5uKTsKLSsgICAga2V5LT5l ID0gQk5fYmluMmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOwotKyAgICBrZXktPmQgPSBCTl9i aW4yYm4oZCwgc2l6ZW9mKGQpLTEsIGtleS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2JpbjJibihw LCBzaXplb2YocCktMSwga2V5LT5wKTsKLSsgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVv ZihxKS0xLCBrZXktPnEpOwotKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9m KGRtcDEpLTEsIGtleS0+ZG1wMSk7Ci0rICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXExLCBz aXplb2YoZG1xMSktMSwga2V5LT5kbXExKTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmluMmJuKGlx bXAsIHNpemVvZihpcW1wKS0xLCBrZXktPmlxbXApOwotKyAgICByZXR1cm4gMTsKLSsgICAgfQot KwotK3ZvaWQgRklQU19jb3JydXB0X3JzYSgpCi0rICAgIHsKLSsgICAgblswXSsrOwotKyAgICB9 Ci0rCi0rLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJTQSBw cml2YXRlIGtleSBzaWduaW5nCi0rICoga2F0X3Ricy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkg UlNBIEtBVCI7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hB MVtdID0gewotKyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwgMHhB MSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKLSsgIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMsIDB4 QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCi0rICAweEY0LCAw eEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAweEY4 LCAweEQzLAotKyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywgMHhC NSwgMHhDNywgMHg4MywgMHhENSwgMHg0QywKLSsgIDB4N0YsIDB4NDksIDB4RkIsIDB4M0YsIDB4 MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCi0rICAweDBELCAw eEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAweDlC LCAweEY1LAotKyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4MywgMHg4 MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKLSsgIDB4MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4 RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCi0rICAweEQ2LCAw eDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAweEJB LCAweEU4LAotKyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhENSwgMHgy NiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKLSsgIDB4MjYsIDB4QzYsIDB4NzksIDB4QzksIDB4 OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfUFNTX1NIQTIyNFtdID0gewotKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgyMCwgMHhC QywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywKLSsgIDB4RkUsIDB4 ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgsIDB4OTUs IDB4RkEsCi0rICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIxLCAweDU5 LCAweDg3LCAweDdCLCAweDFGLCAweDU3LAotKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwgMHgw NiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4OSwKLSsgIDB4ODMsIDB4 NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYsIDB4MDUs IDB4RUUsCi0rICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBELCAweDBD LCAweDY0LCAweDBCLCAweEFCLCAweDIyLAotKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2RiwgMHhB NCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKLSsgIDB4MzcsIDB4 MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4MzgsIDB4MjQs IDB4NDksCi0rICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkzLCAweDhF LCAweEY1LCAweDAzLCAweEVBLCAweDJELAotKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwgMHg3 RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKLSsgIDB4NTQsIDB4 NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4QzAKLSt9OwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1NltdID0gewotKyAgMHg2RCwgMHgz RCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhFMywg MHg4OSwKLSsgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4MTAs IDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYsCi0rICAweDdCLCAweEM1LCAweEE4LCAweDRBLCAweDc0 LCAweDUxLCAweDM2LCAweEUyLCAweDhELCAweDdELCAweDczLCAweDI4LAotKyAgMHhDMSwgMHg3 NywgMHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3Mywg MHg0RSwKLSsgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4REYs IDB4OUQsIDB4NDksIDB4NDcsIDB4MDUsCi0rICAweEFCLCAweEY1LCAweDAxLCAweEQ2LCAweDgx LCAweDQ3LCAweDcwLCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAotKyAgMHgyRiwgMHg3 QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywgMHhEQSwg MHhCNiwKLSsgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4RDks IDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCi0rICAweDIxLCAweEI3LCAweDdFLCAweEFELCAweDdD LCAweDJGLCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAotKyAgMHg1RiwgMHhC NywgMHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwgMHhCOSwg MHhGNiwKLSsgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQsIDB4MUMK LSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4NFtd ID0gewotKyAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5QSwg MHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKLSsgIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4N0Ms IDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCi0rICAweDg2LCAweDAw LCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlBLCAw eENELAotKyAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwgMHhEOSwg MHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKLSsgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4QUYs IDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCi0rICAweEIyLCAweDQ0 LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAweDRGLCAw eEZCLAotKyAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwgMHhBNCwg MHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKLSsgIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4NTks IDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCi0rICAweDk4LCAweDhC LCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAweENBLCAw eDZGLAotKyAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwgMHg4OCwg MHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKLSsgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4OTAs IDB4MTgsIDB4NEIsIDB4RjEKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGth dF9SU0FfUFNTX1NIQTUxMltdID0gewotKyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgwNSwg MHhFOCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4QywKLSsgIDB4QzYsIDB4ODMs IDB4QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4NTMsIDB4 OUEsCi0rICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAweDIzLCAweDRELCAw eDUxLCAweEVELCAweDlFLCAweERELAotKyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2Qiwg MHhGNiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKLSsgIDB4MDEsIDB4MUMs IDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4RkUsIDB4 RDcsCi0rICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAweEJCLCAweEYwLCAw eDNELCAweDc4LCAweDU1LCAweDYxLAotKyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhEMiwg MHg5RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKLSsgIDB4QzUsIDB4NDcs IDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4MzksIDB4 NjMsCi0rICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRCLCAw eEJGLCAweEY0LCAweEE4LCAweEZFLAotKyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5Qywg MHg3QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKLSsgIDB4NUMsIDB4OTcs IDB4NzAsIDB4QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIKLSt9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMVtdID0gewotKyAgMHg3MSwgMHhFRSwgMHgxQSwg MHhDMCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0QywKLSsg IDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEsIDB4 MzMsIDB4OEQsIDB4OUIsCi0rICAweEU3LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAweEI1LCAw eEEzLCAweDUxLCAweDU1LCAweDc3LCAweDkwLCAweENGLAotKyAgMHhEQywgMHgyMiwgMHgzNywg MHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhGOCwKLSsg IDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4ODgsIDB4 OEIsIDB4OEIsIDB4QTEsCi0rICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAweEUwLCAw eDIzLCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAotKyAgMHhBOSwgMHg5RSwgMHhFOCwg MHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0RSwKLSsg IDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4MDQsIDB4 NDQsIDB4RTUsIDB4NUYsCi0rICAweDM1LCAweDA3LCAweDExLCAweEJDLCAweEVELCAweDE5LCAw eDM3LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAotKyAgMHg3MiwgMHgwNSwgMHhERSwg MHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5NSwKLSsg IDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7Ci0rICAweDYy LCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAweEI3LCAw eDE1LCAweEY5LAotKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhFRCwg MHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKLSsgIDB4NUIsIDB4NTUsIDB4OUEsIDB4N0Us IDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCi0rICAweDA4 LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAweDJDLCAw eDlFLCAweENELAotKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2RCwg MHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKLSsgIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0Us IDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0rICAweERC LCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAweDAyLCAw eEM2LCAweDNCLAotKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhGOCwg MHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKLSsgIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUs IDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0rICAweEQ5 LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAweDc3LCAweDgyLCAw eEU2LCAweERDLAotKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgxRSwg MHg4RAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyNTZb XSA9IHsKLSsgIDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4ODIs IDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMsCi0rICAweEU3LCAweDNCLCAweDFELCAweEFGLCAweEZC LCAweDhDLCAweEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFBLCAweDIzLAotKyAgMHg5MiwgMHg4 NywgMHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2Riwg MHgzNSwKLSsgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4MDEs IDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUsCi0rICAweDJDLCAweDQ0LCAweDlCLCAweDkwLCAweEYx LCAweEZCLCAweDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJELCAweDE4LAotKyAgMHgwRSwgMHhD MCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5MSwg MHgzMCwKLSsgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4NUQs IDB4QkYsIDB4RTIsIDB4ODAsIDB4M0EsCi0rICAweDdDLCAweDg1LCAweEI0LCAweEJDLCAweEQx LCAweEU5LCAweEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAotKyAgMHhCOCwgMHg0 MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwgMHhEMSwg MHhEQSwKLSsgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4ODAs IDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCi0rICAweEJELCAweDQ0LCAweDk3LCAweDYwLCAweENE LCAweDU3LCAweEMwLCAweDdBCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBr YXRfUlNBX1NIQTM4NFtdID0gewotKyAgMHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgyNywgMHg0 QywgMHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKLSsgIDB4RDIsIDB4OTEsIDB4 NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcsIDB4Qzcs Ci0rICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5LCAweENB LCAweEZBLCAweDVELCAweDVDLAotKyAgMHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhDOCwgMHg0 NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKLSsgIDB4NjUsIDB4M0UsIDB4 RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYsIDB4Q0Ys Ci0rICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUyLCAweDE5 LCAweDJCLCAweDMwLCAweEMyLAotKyAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0NiwgMHhB QywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKLSsgIDB4RkYsIDB4OTUsIDB4 RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMsIDB4Q0Qs Ci0rICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3LCAweEVCLCAweEQw LCAweDhGLCAweDk5LCAweEYxLAotKyAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgwNCwgMHgz OSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKLSsgIDB4QkQsIDB4MzEsIDB4 QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7Ci0rICAweDY5LCAweDUyLCAweDFCLCAw eDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVELCAweENGLAotKyAg MHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwgMHhG OCwgMHhCMiwgMHg5QSwKLSsgIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIsIDB4 RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCi0rICAweDA0LCAweEMxLCAweDVBLCAw eDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4LAotKyAg MHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwgMHg1 MywgMHg2MiwgMHhCNSwKLSsgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4 RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCi0rICAweEFGLCAweDYyLCAweDdDLCAw eDUyLCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2LAotKyAg MHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwgMHg2 MywgMHg4NCwgMHgwNSwKLSsgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4 N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0rICAweDNFLCAweDYyLCAweENFLCAw eEI1LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAotKyAg MHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKLSsgIDB4 ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4NDUs IDB4NEQsIDB4REYsCi0rICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1LCAweDJG LCAweEM5LCAweENELCAweEM0LCAweEIyLCAweDc1LAotKyAgMHg4MCwgMHhBNCwgMHhGMSwgMHg0 QSwgMHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywKLSsgIDB4 MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4RUUs IDB4QTksIDB4OTcsCi0rICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUzLCAweDYy LCAweDIzLCAweDRCLCAweDM4LCAweEJFLCAweEQ2LAotKyAgMHg1MywgMHgxNSwgMHhGNywgMHhE RiwgMHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwKLSsgIDB4 RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMsIDB4MEMs IDB4NTksIDB4RDcsCi0rICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3LCAweDAz LCAweDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAotKyAgMHg0OCwgMHhBRiwgMHg4MiwgMHhG RSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwKLSsgIDB4 OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQsIDB4MUMs IDB4QjMsIDB4NjcsCi0rICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4LCAweDdE LCAweDQ5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFf U0hBMjU2W10gPSB7Ci0rICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0LCAweDhB LCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAotKyAgMHhFNSwgMHg1MiwgMHgxNSwgMHg4 RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwKLSsgIDB4 RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUsIDB4OTUs IDB4NzMsIDB4Q0YsCi0rICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVFLCAweDgw LCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAotKyAgMHhDNiwgMHg1MywgMHg4OCwgMHgy NiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwKLSsgIDB4 MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQsIDB4Mzgs IDB4MEUsIDB4OTgsCi0rICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1LCAweEE1 LCAweDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAotKyAgMHg3RSwgMHg3NSwgMHg4OSwgMHg2 OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKLSsgIDB4 MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUsIDB4QTEs IDB4NDIsIDB4QkQsCi0rICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJDLCAweERCLCAweDMw LCAweEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAotKyAgMHhFMywgMHhFMiwgMHhFOCwgMHgw QSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4MAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0gewotKyAgMHg1QywgMHg3RCwgMHg5NiwgMHgz NSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwKLSsgIDB4 RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4Mzks IDB4MzcsIDB4Q0IsCi0rICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJF LCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAotKyAgMHhFRiwgMHg3OCwgMHg4MywgMHgx OCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKLSsgIDB4 NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYs IDB4RUUsIDB4MzEsCi0rICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdC LCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAotKyAgMHgzRSwgMHg5QywgMHgzNSwgMHg5 NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKLSsgIDB4 MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4RDUs IDB4N0MsIDB4RkYsCi0rICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5 LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAotKyAgMHhFRiwgMHgwMSwgMHhFNiwgMHg1 RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKLSsgIDB4 RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsKLSsgIDB4 QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4M0Es IDB4QzEsIDB4NjMsCi0rICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlCLCAweDc5LCAweERE LCAweDRCLCAweEUxLCAweEQ5LCAweERBLCAweEFDLAotKyAgMHhFNywgMHg0NywgMHgwOSwgMHhC MiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywKLSsgIDB4 M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUsIDB4Rjks IDB4MTQsIDB4MjgsCi0rICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRFLCAweEYy LCAweEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAotKyAgMHg2RSwgMHgyQiwgMHg3OSwgMHg5 NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwKLSsgIDB4 MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAsIDB4RTAs IDB4RjYsIDB4RDAsCi0rICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5LCAweEJG LCAweDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAotKyAgMHg5RiwgMHgwOSwgMHhDQSwgMHg4 NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywKLSsgIDB4 MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEsIDB4MzAs IDB4NzEsIDB4MUIsCi0rICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1LCAweDU5 LCAweEMzCi0rfTsKLSsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9yc2EoKQotKwl7Ci0rCWludCBy ZXQgPSAwOwotKwlSU0EgKmtleTsKLSsJRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsJaWYgKChr ZXk9UlNBX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCXNldHJzYWtleShrZXkpOwot KwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCi0rCUVW UF9QS0VZX2Fzc2lnbl9SU0EocGssIGtleSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NI QTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RYX0ZM QUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTEgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJ aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQpLAotKwkJ CQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hB MjI0IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1NIQTI1 Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTI1NiBQS0NTIzEiKSkKLSsJCWdvdG8gZXJy OwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NIQTM4NCks Ci0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJCQkJIlJT QSBTSEEzODQgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0Ff U0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAotKwkJCQlFVlBfc2hhNTEyKCksIEVWUF9N RF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQotKwkJZ290 byBlcnI7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBz aXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yoa2F0X1JT QV9QU1NfU0hBMSksCi0rCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAot KwkJCQkiUlNBIFNIQTEgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9S U0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTIyNCksCi0rCQkJCUVWUF9zaGEy MjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMjI0IFBTUyIpKQot KwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNpemVvZihr YXRfUlNBX1BTU19TSEEyNTYpLAotKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19Q QURfUFNTLAotKwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK LSsJCQkJa2F0X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0KSwKLSsJ CQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJTQSBTSEEz ODQgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNTX1NIQTUx Miwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTUxMiksCi0rCQkJCUVWUF9zaGE1MTIoKSwgRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBNTEyIFBTUyIpKQotKwkJZ290byBlcnI7 Ci0rCi0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXpl b2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0X1JTQV9Y OTMxX1NIQTEpLAotKwkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJ CQkiUlNBIFNIQTEgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5COiBTSEEyMjQgbm90IHN1 cHBvcnRlZCBpbiBYOS4zMSAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg a2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hBMjU2LCBz aXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksCi0rCQkJRVZQX3NoYTI1NigpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEyNTYgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0r CWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ri cykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hB Mzg0KSwKLSsJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsJCQki UlNBIFNIQTM4NCBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0X1JTQV9Y OTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLAotKwkJCUVWUF9zaGE1MTIo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBNTEyIFg5MzEiKSkKLSsJ CWdvdG8gZXJyOwotKwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlmIChwaykKLSsJCUVW UF9QS0VZX2ZyZWUocGspOwotKwllbHNlIGlmIChrZXkpCi0rCQlSU0FfZnJlZShrZXkpOwotKwly ZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYwotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzCTIwMTAt MDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi1AQCAtMCwwICsxLDI4MSBAQAotKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCi0r LyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20p Ci0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBT U0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNv ZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29u Zm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg Zm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhl IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24s IGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVz dCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRo IHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1z Ci0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0 LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMg c3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJl IHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmlj IFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2Yg dGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZv cm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9j dW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2Uu Ci0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAg ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg ZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5n IChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNh biBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVp bmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91 IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJl b2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5 b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5j b20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBg YEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsg KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICog VGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZh aWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUg Y2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5k IHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0 aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHRpbWUuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3Jz YS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r Ci0rZXh0ZXJuIGludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSk7Ci0rI2VuZGlmCi0rCi0rLyog WDkuMzEgUlNBIGtleSBkZXJpdmF0aW9uIGFuZCBnZW5lcmF0aW9uICovCi0rCi0raW50IFJTQV9Y OTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpx MSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIs IGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAq WHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNi KQotKwl7Ci0rCUJJR05VTSAqcjA9TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVMTDsKLSsJ Qk5fQ1RYICpjdHg9TlVMTCwqY3R4Mj1OVUxMOwotKwotKwlpZiAoIXJzYSkgCi0rCQlnb3RvIGVy cjsKLSsKLSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eCkgCi0rCQlnb3RvIGVycjsK LSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCi0rCXIwID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMSA9 IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIzID0gQk5fQ1RY X2dldChjdHgpOwotKwotKwlpZiAocjMgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIXJz YS0+ZSkKLSsJCXsKLSsJCXJzYS0+ZSA9IEJOX2R1cChlKTsKLSsJCWlmICghcnNhLT5lKQotKwkJ CWdvdG8gZXJyOwotKwkJfQotKwllbHNlCi0rCQllID0gcnNhLT5lOwotKwotKwkvKiBJZiBub3Qg YWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KLSsJICog VGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMu Ci0rCSAqLwotKwotKwlpZiAoWHAgJiYgIXJzYS0+cCkKLSsJCXsKLSsJCXJzYS0+cCA9IEJOX25l dygpOwotKwkJaWYgKCFyc2EtPnApCi0rCQkJZ290byBlcnI7Ci0rCi0rCQlpZiAoIUJOX1g5MzFf ZGVyaXZlX3ByaW1lX2V4KHJzYS0+cCwgcDEsIHAyLAotKwkJCQkJWHAsIFhwMSwgWHAyLCBlLCBj dHgsIGNiKSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKFhxICYmICFyc2EtPnEpCi0r CQl7Ci0rCQlyc2EtPnEgPSBCTl9uZXcoKTsKLSsJCWlmICghcnNhLT5xKQotKwkJCWdvdG8gZXJy OwotKwkJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwKLSsJCQkJ CVhxLCBYcTEsIFhxMiwgZSwgY3R4LCBjYikpCi0rCQkJZ290byBlcnI7Ci0rCQl9Ci0rCi0rCWlm ICghcnNhLT5wIHx8ICFyc2EtPnEpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9D VFhfZnJlZShjdHgpOwotKwkJcmV0dXJuIDI7Ci0rCQl9Ci0rCi0rCS8qIFNpbmNlIGJvdGggcHJp bWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKLSsJICogY29t cG9uZW50cy4KLSsJICovCi0rCi0rCS8qIGNhbGN1bGF0ZSBuICovCi0rCXJzYS0+bj1CTl9uZXco KTsKLSsJaWYgKHJzYS0+biA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghQk5fbXVsKHJz YS0+bixyc2EtPnAscnNhLT5xLGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRl IGQgKi8KLSsJaWYgKCFCTl9zdWIocjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKLSsJCWdvdG8g ZXJyOwkvKiBwLTEgKi8KLSsJaWYgKCFCTl9zdWIocjIscnNhLT5xLEJOX3ZhbHVlX29uZSgpKSkK LSsJCWdvdG8gZXJyOwkvKiBxLTEgKi8KLSsJaWYgKCFCTl9tdWwocjAscjEscjIsY3R4KSkKLSsJ CWdvdG8gZXJyOwkvKiAocC0xKShxLTEpICovCi0rCi0rCWlmICghQk5fZ2NkKHIzLCByMSwgcjIs IGN0eCkpCi0rCQlnb3RvIGVycjsKLSsKLSsJaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywg Y3R4KSkKLSsJCWdvdG8gZXJyOwkvKiBMQ00oKHAtMSkocS0xKSkgKi8KLSsKLSsJY3R4MiA9IEJO X0NUWF9uZXcoKTsKLSsJaWYgKCFjdHgyKQotKwkJZ290byBlcnI7Ci0rCi0rCXJzYS0+ZD1CTl9t b2RfaW52ZXJzZShOVUxMLHJzYS0+ZSxyMCxjdHgyKTsJLyogZCAqLwotKwlpZiAocnNhLT5kID09 IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCi0r CXJzYS0+ZG1wMT1CTl9uZXcoKTsKLSsJaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQotKwkJZ290byBl cnI7Ci0rCWlmICghQk5fbW9kKHJzYS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkKLSsJCWdvdG8gZXJy OwotKwotKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KLSsJcnNhLT5kbXExPUJOX25ldygp OwotKwlpZiAocnNhLT5kbXExID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFCTl9tb2Qo cnNhLT5kbXExLHJzYS0+ZCxyMixjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0 ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KLSsJcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEws cnNhLT5xLHJzYS0+cCxjdHgyKTsKLSsKLSsJZXJyOgotKwlpZiAoY3R4KQotKwkJewotKwkJQk5f Q1RYX2VuZChjdHgpOwotKwkJQk5fQ1RYX2ZyZWUoY3R4KTsKLSsJCX0KLSsJaWYgKGN0eDIpCi0r CQlCTl9DVFhfZnJlZShjdHgyKTsKLSsJLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nl c3NmdWwgKi8KLSsJaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKLSsJCXJldHVybiAxOwot KwotKwlyZXR1cm4gMDsKLSsKLSsJfQotKwotK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgo UlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKLSsJewot KwlpbnQgb2sgPSAwOwotKwlCSUdOVU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsKLSsJQk5fQ1RY ICpjdHggPSBOVUxMOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKGJpdHMgPCBPUEVO U1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJ UFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOwotKwkg ICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCi0rCWlmIChiaXRzICYgMHhmZikKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJ RF9LRVlfTEVOR1RIKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwotKwlpZihGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFf R0VORVJBVEVfS0VZX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1 cm4gMDsKLSsJICAgIH0KLSsjZW5kaWYKLSsKLSsJY3R4ID0gQk5fQ1RYX25ldygpOwotKwlpZiAo IWN0eCkKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwlYcCA9IEJO X0NUWF9nZXQoY3R4KTsKLSsJWHEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCWlmICghQk5fWDkzMV9n ZW5lcmF0ZV9YcHEoWHAsIFhxLCBiaXRzLCBjdHgpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJcnNh LT5wID0gQk5fbmV3KCk7Ci0rCXJzYS0+cSA9IEJOX25ldygpOwotKwlpZiAoIXJzYS0+cCB8fCAh cnNhLT5xKQotKwkJZ290byBlcnJvcjsKLSsKLSsJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9t IFhwLCBYcSAqLwotKwotKwlpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcCwKLSsJCQkJCWUsIGN0eCwgY2IpKQotKwkJZ290byBl cnJvcjsKLSsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCwgWHEsCi0rCQkJCQllLCBjdHgsIGNiKSkKLSsJCWdvdG8gZXJyb3I7 Ci0rCi0rCS8qIFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2ls bCBqdXN0IGRlcml2ZQotKwkgKiByZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCi0rCSAqLwotKwot KwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0r CQkJCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKLSsJCWdvdG8g ZXJyb3I7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZighZmlwc19jaGVja19yc2EocnNh KSkKLSsJICAgIGdvdG8gZXJyb3I7Ci0rI2VuZGlmCi0rCi0rCW9rID0gMTsKLSsKLSsJZXJyb3I6 Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhfZnJlZShj dHgpOwotKwkJfQotKwotKwlpZiAob2spCi0rCQlyZXR1cm4gMTsKLSsKLSsJcmV0dXJuIDA7Ci0r Ci0rCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19zaGEx X3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9maXBzL2ZpcHNfc2hh MV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3No YTFfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYwky MDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw5OSBAQAotKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlv bi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBv cGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu Ci0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK LSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL3NoYS5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgY2hhciB0 ZXN0W11bNjBdPQotKyAgICB7Ci0rICAgICIiLAotKyAgICAiYWJjIiwKLSsgICAgImFiY2RiY2Rl Y2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIgotKyAgICB9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9ESUdFU1RfTEVOR1RI XT0KLSsgICAgewotKyAgICB7IDB4ZGEsMHgzOSwweGEzLDB4ZWUsMHg1ZSwweDZiLDB4NGIsMHgw ZCwweDMyLDB4NTUsCi0rICAgICAgMHhiZiwweGVmLDB4OTUsMHg2MCwweDE4LDB4OTAsMHhhZiww eGQ4LDB4MDcsMHgwOSB9LAotKyAgICB7IDB4YTksMHg5OSwweDNlLDB4MzYsMHg0NywweDA2LDB4 ODEsMHg2YSwweGJhLDB4M2UsCi0rICAgICAgMHgyNSwweDcxLDB4NzgsMHg1MCwweGMyLDB4NmMs MHg5YywweGQwLDB4ZDgsMHg5ZCB9LAotKyAgICB7IDB4ODQsMHg5OCwweDNlLDB4NDQsMHgxYyww eDNiLDB4ZDIsMHg2ZSwweGJhLDB4YWUsCi0rICAgICAgMHg0YSwweGExLDB4ZjksMHg1MSwweDI5 LDB4ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9LAotKyAgICB9OwotKwotK3ZvaWQgRklQU19jb3Jy dXB0X3NoYTEoKQotKyAgICB7Ci0rICAgIHRlc3RbMl1bMF0rKzsKLSsgICAgfQotKwotK2ludCBG SVBTX3NlbGZ0ZXN0X3NoYTEoKQotKyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICBmb3Iobj0w IDsgbjxzaXplb2YodGVzdCkvc2l6ZW9mKHRlc3RbMF0pIDsgKytuKQotKwl7Ci0rCXVuc2lnbmVk IGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOwotKwotKwlFVlBfRGlnZXN0KHRlc3Rbbl0sc3Ry bGVuKHRlc3Rbbl0pLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKTsKLSsJaWYobWVtY21wKG1k LHJldFtuXSxzaXplb2YgbWQpKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19T RUxGVEVTVF9TSEExLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKwkgICAgcmV0dXJuIDA7Ci0r CSAgICB9Ci0rCX0KLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYy5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEu YwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3No YTEuYy5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCTIwMTAtMDIt MTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDE3MyBAQAotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg 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 TUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRs aWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNv bmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFj Lmg+Ci0rCi0rI2lmbmRlZiBGSVBTQ0FOSVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxl ZCgpIHsgcmV0dXJuIDA7IH0KLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQotK3ZvaWQg T1BFTlNTTF9jbGVhbnNlKHZvaWQgKnAsc2l6ZV90IGxlbikge30KLSsjZW5kaWYKLSsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQV9DVFggKm1kX2N0 eCxTSEFfQ1RYICpvX2N0eCwKLSsJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKLSsgICAgewotKyAg ICBzaXplX3QgbGVuPXN0cmxlbihrZXkpOwotKyAgICBpbnQgaTsKLSsgICAgdW5zaWduZWQgY2hh ciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtITUFD X01BWF9NRF9DQkxPQ0tdOwotKwotKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKLSsJewotKwlT SEExX0luaXQobWRfY3R4KTsKLSsJU0hBMV9VcGRhdGUobWRfY3R4LGtleSxsZW4pOwotKwlTSEEx X0ZpbmFsKGtleW1kLG1kX2N0eCk7Ci0rCWxlbj0yMDsKLSsJfQotKyAgICBlbHNlCi0rCW1lbWNw eShrZXltZCxrZXksbGVuKTsKLSsgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhf TURfQ0JMT0NLLWxlbik7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NL IDsgaSsrKQotKwlwYWRbaV09MHgzNl5rZXltZFtpXTsKLSsgICAgU0hBMV9Jbml0KG1kX2N0eCk7 Ci0rICAgIFNIQTFfVXBkYXRlKG1kX2N0eCxwYWQsU0hBX0NCTE9DSyk7Ci0rCi0rICAgIGZvcihp PTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHg1Y15rZXltZFtp XTsKLSsgICAgU0hBMV9Jbml0KG9fY3R4KTsKLSsgICAgU0hBMV9VcGRhdGUob19jdHgscGFkLFNI QV9DQkxPQ0spOwotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25lZCBj aGFyICptZCxTSEFfQ1RYICptZF9jdHgsU0hBX0NUWCAqb19jdHgpCi0rICAgIHsKLSsgICAgdW5z aWduZWQgY2hhciBidWZbMjBdOwotKwotKyAgICBTSEExX0ZpbmFsKGJ1ZixtZF9jdHgpOwotKyAg ICBTSEExX1VwZGF0ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7Ci0rICAgIFNIQTFfRmluYWwobWQs b19jdHgpOwotKyAgICB9Ci0rCi0rI2VuZGlmCi0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAq KmFyZ3YpCi0rICAgIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFyIGtl eVtdPSJldGFvbnJpc2hkbGN1cGZtIjsKLSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAgIGlm KGFyZ2MgPCAyKQotKwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlsw XSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsKLSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChhcmd2 W25dLCItYmluYXJ5IikpCi0rCXsKLSsJbisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkg ZmluZ2VycHJpbnQuLi4gKi8KLSsJfQotKwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKLSsJ ewotKwlGSUxFICpmPWZvcGVuKGFyZ3Zbbl0sInJiIik7Ci0rCVNIQV9DVFggbWRfY3R4LG9fY3R4 OwotKwl1bnNpZ25lZCBjaGFyIG1kWzIwXTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQotKwkgICAg ewotKwkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0KLSsKLSsJ aG1hY19pbml0KCZtZF9jdHgsJm9fY3R4LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAgIHsKLSsJ ICAgIGNoYXIgYnVmWzEwMjRdOwotKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1 ZixmKTsKLSsKLSsJICAgIGlmKGwgPT0gMCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkKLSsJCSAg ICB7Ci0rCQkgICAgcGVycm9yKGFyZ3Zbbl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkgICAgfQot KwkJZWxzZQotKwkJICAgIGJyZWFrOwotKwkJfQotKwkgICAgU0hBMV9VcGRhdGUoJm1kX2N0eCxi dWYsbCk7Ci0rCSAgICB9Ci0rCWhtYWNfZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOwotKwotKwlp ZiAoYmluYXJ5KQotKwkgICAgewotKwkgICAgZndyaXRlKG1kLDIwLDEsc3Rkb3V0KTsKLSsJICAg IGJyZWFrOwkvKiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICovCi0rCSAgICB9Ci0rCi0rCXByaW50 ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2W25dKTsKLSsJZm9yKGk9MCA7IGkgPCAyMCA7ICsraSkK LSsJICAgIHByaW50ZigiJTAyeCIsbWRbaV0pOwotKwlwcmludGYoIlxuIik7Ci0rCX0KLSsjZW5k aWYKLSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9maXBz X3Rlc3Rfc3VpdGUuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAs MCArMSw1ODggQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqCi0rICogVGhp cyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0 ZXN0aW5nCi0rICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9u c3RyYXRlcyB0aGUgdXNlIG9mIHRoZQotKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBh IHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKLSsgKiBmdW5jdGlvbnMuICBBIHBvd2Vy LXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5Ci0rICogcG9pbnRp bmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKLSsgKgotKyAqIENvbnRyaWJ1dGVkIGJ5 IFN0ZXZlIE1hcnF1ZXNzLgotKyAqCi0rICovCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1 ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4K LSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rCi0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvc2hhLmg+Ci0rCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQotKyAgICB7Ci0rICAgIHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4i KTsKLSsgICAgcmV0dXJuKDApOwotKyAgICB9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rLyogQUVTOiBlbmNyeXB0IGFu ZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFs IHBsYWludGV4dAotKyovCi0rc3RhdGljIGludCBGSVBTX2Flc190ZXN0KHZvaWQpCi0rCXsKLSsJ aW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFy IGNpdG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBrZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3LDgs OSwxMCwxMSwxMiwxMywxNCwxNSwxNn07Ci0rCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9 ICJldGFvbnJpc2hkbGN1IjsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NU WF9pbml0KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhf ZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBo ZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgo JmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290 byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCAxNik7Ci0rCWlmIChtZW1j bXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQotKwkJZ290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCWVy cjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsJcmV0dXJuIHJldDsKLSsJfQot KwotK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsK LSsJdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFs4XTsKLSsg ICAgCXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEz LDE0LDE1LDE2LDE3LDE4LAotKwkJICAgICAgICAgICAgICAxOSwyMCwyMSwyMiwyMywyNH07Ci0r ICAgIAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScsICd0JywgJ2EnLCAnbycsICdu JywgJ3InLCAnaScsICdzJyB9OwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJf Q1RYX2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2Vk ZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9D aXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9l eCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJ Z290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKLSsJaWYgKG1l bWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwll cnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0K LSsKLSsvKgotKyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBs YWludGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJUFNfZHNhX3Rlc3QoaW50IGJhZCkKLSsgICAg ewotKyAgICBEU0EgKmRzYSA9IE5VTEw7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICB1bnNpZ25l ZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2 MF07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBpbnQgciA9IDA7Ci0rICAgIEVWUF9N RF9DVFggbWN0eDsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhf aW5pdCgmbWN0eCk7Ci0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsgICAgaWYgKCFkc2EpCi0rCWdv dG8gZW5kOwotKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxO VUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJh dGVfa2V5KGRzYSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dv cmQoZHNhLT5wdWJfa2V5LCAxKTsKLSsKLSsgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsg ICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4 LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRh dGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYg KCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsK LSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0r CWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVv ZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0 eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgm bWN0eCk7Ci0rICAgIGlmIChkc2EpCi0rICAJICBEU0FfZnJlZShkc2EpOwotKyAgICBpZiAociAh PSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKgotKyAqIFJT QTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8K LStzdGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewotKyAgICBSU0EgKmtl eTsKLSsgICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0gImV0YW9ucmlzaGRsYyI7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAg ICBCSUdOVU0gKmJuOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAgIEVWUF9QS0VZIHBrOwot KyAgICBpbnQgciA9IDA7Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURf Q1RYX2luaXQoJm1jdHgpOwotKyAgICBrZXkgPSBSU0FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3 KCk7Ci0rICAgIGlmICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3Jk KGJuLCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4s TlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAgaWYgKGJhZCkKLSsJ ICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7Ci0rCi0rICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9S U0E7Ci0rICAgIHBrLnBrZXkucnNhID0ga2V5OwotKwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9l eCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9T aWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQot Kwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAm cGspKQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwg RVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRh dGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8g ZW5kOwotKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0r ICAgIGVuZDoKLSsgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGtleSkK LSsgIAkgICAgUlNBX2ZyZWUoa2V5KTsKLSsgICAgaWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0r ICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93 biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3Jy ZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAg IHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4 MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQs IDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4 MTggfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAg dW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9l cnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVM TCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2Vz dCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKwotKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5k IGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0 YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBk aWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KLSsJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4Yjgs IDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhjOSwgMHg2OCwgMHhjMCwgMHhl YSwgMHg0MCwgMHg5MSwKLSsJIDB4NiwgMHhlYywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1 ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1N307 Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2ln bmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEws IEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2Vz dCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKwotKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5k IGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0 YXRpYyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBk aWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KLSsJezB4OTksIDB4YzksIDB4ZTksIDB4NWIs IDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEsIDB4 NjQsIDB4MjgsIDB4Y2EsCi0rCSAweDE2LCAweDFmLCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAw eDBmLCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAweGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRh LAotKwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhh OSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgyMiwKLSsJIDB4NDksIDB4 NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYs IDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltd ID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1Rf TEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2Vz dChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpKSByZXR1 cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTE6IGdlbmVy YXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAg cHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEx X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVk IGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDczLCAweGY3LCAweGEwLCAweDQ4 LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAweGVhLCAweDU2LCAweDFiLCAw eDYxLCAweDJlLCAweDcwLAotKwkgMHhiMiwgMHhmYiwgMHhlYywgMHhjNn07Ci0rCi0rICAgIHVu c2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRs ZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTEo KSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4g MDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAw OwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBo YXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNv bXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rl c3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNo YXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDc1LCAweDU4LCAweGQ1LCAweGJkLCAw eDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJlLCAweDFjLCAweGIyLCAweGYw LCAweDIwLCAweDM1LAotKwkgMHhlNSwgMHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhm YywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOX07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIg b3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAg IEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTIyNCgpLGtleSxzaXpl b2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBp ZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25v d24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29y cmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpCi0rICAg IHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWdu ZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtF VlBfTUFYX01EX1NJWkVdID0KLSsJezB4ZTksIDB4MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIs IDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4 ODcsCi0rCSAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAw eDlmLCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAweGRhLCAweDI0LCAweGY0fTsKLSsKLSsgICAg dW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91 dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hh MjU2KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0 dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTM4NDogZ2VuZXJh dGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBw cmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4 NF90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQi OwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25l ZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhiMiwgMHg5ZCwgMHg0MCwgMHg1 OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5OSwg MHhlZiwgMHgzYiwgMHgxMCwKLSsJIDB4ZTIsIDB4ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEs IDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4 MDgsCi0rCSAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAw eGZiLCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAweDliLCAweDg4LCAweDFjfTsKLSsKLSsgICAg dW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91 dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hh Mzg0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0 dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTUxMjogZ2VuZXJh dGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBw cmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUx Ml90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQi OwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25l ZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhjZCwgMHgzZSwgMHhiOSwgMHg1 MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwgMHhmMywgMHg3NywgMHg1OSwg MHg4NSwgMHhhOSwgMHhlNiwKLSsJIDB4ZjcsIDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAs IDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4 YjEsCi0rCSAweGQ3LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAw eDBiLCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAweDdmLCAweGViLCAweDljLAotKwkgMHg0Nywg MHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5 NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1M307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIg b3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAg IEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTUxMigpLGtleSxzaXpl b2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBp ZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rCi0rLyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJz Ci0rKi8KLStzdGF0aWMgaW50IGRoX3Rlc3QoKQotKyAgICB7Ci0rICAgIERIICpkaDsKLSsgICAg RVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGRoID0gRklQU19kaF9uZXcoKTsKLSsgICAgaWYgKCFk aCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwg MTAyNCwgMiwgTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBGSVBTX2RoX2ZyZWUoZGgpOwotKyAg ICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFplcm9pemUKLSsqLwotK3N0YXRpYyBpbnQgWmVy b2l6ZSgpCi0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIHVu c2lnbmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKLSsJeyAweDQ4LCAweDUwLCAweGYwLCAweGEzLCAw eDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdmLCAweDgzLCAweDAyLCAweGIx LCAweDA5LCAweDY4IH07Ci0rICAgIGludCBpLCBuOwotKwotKyAgICBrZXkgPSBGSVBTX3JzYV9u ZXcoKTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQotKwlyZXR1 cm4gMDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJh dGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUo Ym4pOwotKyAgICAKLSsgICAgbiA9IEJOX251bV9ieXRlcyhrZXktPmQpOwotKyAgICBwcmludGYo IiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIsIG4pOwotKyAgICBwcmludGYo Ilx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRv dXQsIGtleS0+ZCk7Ci0rICAgIEJOX3JhbmQoa2V5LT5kLG4qOCwtMSwwKTsKLSsgICAgcHJpbnRm KCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRv dXQsIGtleS0+ZCk7Ci0rCi0rICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92 ZXJ3cml0aW5nOiBcblx0XHQiKTsKLSsgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkp OyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIp OwotKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vya2V5KTsKLSsgICAgcHJpbnRm KCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZv cihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5 W2ldKTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0K LSsKLStzdGF0aWMgaW50IEVycm9yOwotK2NvbnN0IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIgKm1z ZykKLSsgICAgewotKyAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAgRXJyb3IrKzsKLSsgICAg cmV0dXJuIG1zZzsgCi0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikK LSsgICAgewotKwotKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVw dF9kc2Ffa2V5Z2VuID0gMDsKLSsgICAgaW50IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKLSsg ICAgaW50IGRvX3JuZ19zdGljayA9IDA7Ci0rICAgIGludCBub19leGl0ID0gMDsKLSsKLSsgICAg cHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5cbiIpOwotKwotKyAgICAvKiBM b2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkgKi8KLSsgICAgUkFORF9sb2Fk X2ZpbGUoIi5ybmQiLCAxMDI0KTsKLSsKLSsgICAgaWYgKGFyZ3ZbMV0pIHsKLSsgICAgICAgIC8q IENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KLSsgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJh ZXMiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMoKTsKLSsgICAgICAgICAgICBw cmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4i KTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKLSsgICAg ICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVD QiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAg ICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikpIHsKLSsgICAgICAgICAgICBG SVBTX2NvcnJ1cHRfZHNhKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRp b24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0r ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYSIpKSB7Ci0rICAgICAgICAg ICAgRklQU19jb3JydXB0X3JzYSgpOwotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIp OwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXkiKSkgewotKyAg ICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRh dGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKwkgICAgYmFkX3JzYSA9IDE7Ci0rCSAg ICBub19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNh a2V5Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7Ci0rCSAgICBub19l eGl0ID0gMTsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2ln bmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKLSsgICAgICAg IH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5IikpIHsKLSsgICAgICAgICAgICBw cmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBj b3JydXB0ZWQga2V5Li4uXG4iKTsKLSsJICAgIGJhZF9kc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9 IDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7 Ci0rCSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0r ICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxp ZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYg KCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9z aGExKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNoIHdpdGggY29ycnVwdGVkIEtB VC4uLlxuIik7Ci0rCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKLSsJICAg IEZJUFNfY29ycnVwdF9ybmcoKTsKLSsJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdz dGljayIpKSB7Ci0rCSAgICBkb19ybmdfc3RpY2sgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0r CSAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGludW91cyB0ZXN0Li4uXG4iKTsK LSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJCYWQgYXJndW1lbnQgXCIl c1wiXG4iLCBhcmd2WzFdKTsKLSsgICAgICAgICAgICBleGl0KDEpOwotKyAgICAgICAgfQotKwlp ZiAoIW5vX2V4aXQpIHsKLSsgICAgICAgIAlpZiAoIUZJUFNfbW9kZV9zZXQoMSkpIHsKLSsgCQkg ICAgZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgICAgICAJICAgIHByaW50ZigiUG93ZXItdXAgc2Vs ZiB0ZXN0IGZhaWxlZFxuIik7Ci0rCQkgICAgZXhpdCgxKTsKLSsJCX0KLSsgICAgICAgIAlwcmlu dGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsKLSsgICAgICAgIAlleGl0KDAp OwotKwl9Ci0rICAgIH0KLSsKLSsgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3Bl cmF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiMS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBo aWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOwotKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxn b3JpdGhtIChELUgpLi4uIik7Ci0rICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWxc biIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0 Ci0rICAgICovCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBwcmludGYoIjIuIEF1dG9t YXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsKLSsgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEp KQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKyAgICAgICAgcHJpbnRmKEZhaWwoIkZBSUxF RCFcbiIpKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOwot KyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQotKyAgICAgICAgICAgIEZJUFNfY29ycnVw dF9kc2Ffa2V5Z2VuKCk7Ci0rICAgIGlmIChkb19jb3JydXB0X3JzYV9rZXlnZW4pCi0rICAgICAg ICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX3JuZ19zdGljaykK LSsgICAgICAgICAgICBGSVBTX3JuZ19zdGljaygpOwotKwotKyAgICAvKiBBRVMgZW5jcnlwdGlv bi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVj cnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNzZnVs XG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlv biBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNC4gUlNB IGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJp bnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKLSsKLSsgICAgLyogREVTLUNCQyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsg ICAgKi8KLSsgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIp OwotKyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25h dHVyZSB2YWxpZGF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0 aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfZHNh X3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwot KwotKyAgICAvKiBTSEEtMSBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2EuIFNIQS0xIGhh c2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIg OiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTI1NiBoYXNoCi0rICAgICov Ci0rICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNf c2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0r Ci0rICAgIC8qIFNIQS01MTIgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdjLiBTSEEtNTEy IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1 bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0xIGhhc2gK LSsgICAgKi8KLSsgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7Ci0rICAgIHBy aW50ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMjI0IGhhc2gKLSsgICAgKi8KLSsgICAg cHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2ht YWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7 Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2Yu IEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTI1Nl90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAv KiBITUFDLVNIQS0zODQgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0z ODQgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEzODRfdGVzdCgpID8gInN1 Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEt NTEyIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4i KTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9n cmFwaGljIG9wZXJhdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBj cnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIElu Y2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwotKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJz dWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RM WSFcbiIpICk7Ci0rCi0rICAgIC8qIFplcm9pemF0aW9uCi0rICAgICovCi0rICAgIHByaW50Zigi OS4gWmVyby1pemF0aW9uLi4uXG4iKTsKLSsgICAgcHJpbnRmKCBaZXJvaXplKCkgPyAiXHRzdWNj ZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZ IVxuIikgKTsKLSsKLSsgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBl cnJvcnNcbiIsIEVycm9yKTsKLSsgICAgcmV0dXJuIEVycm9yID8gMSA6IDA7Ci0rICAgIH0KLSsK LSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHNfbG9jbC5o LmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwc19sb2NsLmgKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9maXBzX2xvY2wuaC5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwc19sb2Ns LmgJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNzIgQEAK LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0r I2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyNlbmRpZgotKwotK3ZvaWQgZmlw c193X2xvY2sodm9pZCk7Ci0rdm9pZCBmaXBzX3dfdW5sb2NrKHZvaWQpOwotK3ZvaWQgZmlwc19y X2xvY2sodm9pZCk7Ci0rdm9pZCBmaXBzX3JfdW5sb2NrKHZvaWQpOwotK2ludCBmaXBzX2lzX3N0 YXJ0ZWQodm9pZCk7Ci0rdm9pZCBmaXBzX3NldF9zdGFydGVkKHZvaWQpOwotK2ludCBmaXBzX2lz X293bmluZ190aHJlYWQodm9pZCk7Ci0raW50IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCk7 Ci0rdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpOwotK2ludCBmaXBzX2NsZWFyX293 bmluZ190aHJlYWQodm9pZCk7Ci0rCi0rI2RlZmluZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpF CTE2Ci0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK30KLSsjZW5kaWYKLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9maXBzL01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vZmlwcy9NYWtlZmlsZQkyMDEw LTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw4MSBAQAotKyMKLSsj IE9wZW5TU0wvY3J5cHRvL2ZpcHMvTWFrZWZpbGUKLSsjCi0rCi0rRElSPQlmaXBzCi0rVE9QPQku Li8uLgotK0NDPQljYwotK0lOQ0xVREVTPQotK0NGTEFHPS1nCi0rTUFLRUZJTEU9CU1ha2VmaWxl Ci0rQVI9CQlhciByCi0rCi0rQ0ZMQUdTPSAkKElOQ0xVREVTKSAkKENGTEFHKQotKwotK0dFTkVS QUw9TWFrZWZpbGUKLStURVNUPWZpcHNfdGVzdF9zdWl0ZS5jIGZpcHNfcmFuZHRlc3QuYwotK0FQ UFM9Ci0rCi0rTElCPSQoVE9QKS9saWJjcnlwdG8uYQotK0xJQlNSQz1maXBzX2Flc19zZWxmdGVz dC5jIGZpcHNfZGVzX3NlbGZ0ZXN0LmMgZmlwc19obWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3Nl bGZ0ZXN0LmMgXAotKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5jIGZpcHNfc2hhMV9zZWxmdGVzdC5j IGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5jICBmaXBzX3JhbmQuYyBcCi0rICAgIGZpcHNfcnNh X3g5MzFnLmMKLSsKLStMSUJPQko9Zmlwc19hZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVz dC5vIGZpcHNfaG1hY19zZWxmdGVzdC5vIGZpcHNfcmFuZF9zZWxmdGVzdC5vIFwKLSsgICAgZmlw c19yc2Ffc2VsZnRlc3QubyBmaXBzX3NoYTFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2Vs ZnRlc3QubyAgZmlwc19yYW5kLm8gXAotKyAgICBmaXBzX3JzYV94OTMxZy5vCi0rCi0rU1JDPSAk KExJQlNSQykgZmlwc19zdGFuZGFsb25lX3NoYTEuYwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlw c19yYW5kLmgKLStIRUFERVI9CSQoRVhIRUFERVIpCi0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQo U1JDKSAkKEhFQURFUikKLSsKLSt0b3A6Ci0rCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0 byBTRElSUz0kKERJUikgc3ViX2FsbCkKLSsKLSthbGw6CWxpYgotKwotK2xpYjoJJChMSUJPQkop Ci0rCSQoQVIpICQoTElCKSAkKExJQk9CSikKLSsJJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5l dmVyIG1pbmQuCi0rCUB0b3VjaCBsaWIKLSsKLStmaWxlczoKLSsJJChQRVJMKSAkKFRPUCkvdXRp bC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLSsKLStsaW5rczoKLSsJQCQoUEVS TCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVS KQotKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0r CUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLSsKLStp bnN0YWxsOgotKwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9w IE1ha2VmaWxlLi4uCi0rCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVh ZGVybGlzdCA7IFwKLSsJZG8gIFwKLSsJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFM TFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJ WCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotKwlkb25lOwotKwotK3Rh Z3M6Ci0rCWN0YWdzICQoU1JDKQotKwotK3Rlc3RzOgotKwotK2xpbnQ6Ci0rCWxpbnQgLURMSU5U ICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgotKwotK2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFLRURF UEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFLRURF UEVORCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJ QlNSQykKLSsKLStkY2xlYW46Ci0rCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUg VEhJUyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcK LSsJbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1mICou byAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0rCi0r IyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0Lgot KwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9obWFjL2htYWMuYwotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODowMi4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9obWFjL2htYWMuYwkyMDEw LTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTc3LDYgKzc3LDEzIEBAIGludCBI TUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KLSAKLSAJaWYgKGtleSAhPSBOVUxM KQotIAkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChGSVBTX21vZGUoKSAmJiAhKG1k LT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCi0rCQkmJiAoIShjdHgtPm1kX2N0eC5mbGFncyAm IEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKLSsJCSB8fCAhKGN0eC0+aV9jdHguZmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rCQkgfHwgIShjdHgtPm9fY3R4 LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCi0rCQkJZ290byBlcnI7 Ci0rI2VuZGlmCi0gCQlyZXNldD0xOwotIAkJaj1FVlBfTURfYmxvY2tfc2l6ZShtZCk7Ci0gCQlP UEVOU1NMX2Fzc2VydChqIDw9IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7Ci1AQCAtMjA5LDMgKzIx NiwxMCBAQCB1bnNpZ25lZCBjaGFyICpITUFDKGNvbnN0IEVWUF9NRCAqZXZwX21kCi0gCXJldHVy biBOVUxMOwotIAl9Ci0gCi0rdm9pZCBITUFDX0NUWF9zZXRfZmxhZ3MoSE1BQ19DVFggKmN0eCwg dW5zaWduZWQgbG9uZyBmbGFncykKLSsJewotKwlFVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LT5p X2N0eCwgZmxhZ3MpOwotKwlFVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LT5vX2N0eCwgZmxhZ3Mp OwotKwlFVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LT5tZF9jdHgsIGZsYWdzKTsKLSsJfQotKwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vaG1hYy9obWFjLmguZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9obWFjL2htYWMuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL2htYWMvaG1hYy5oLmZpcHMJMjAxMC0wMi0xNiAyMjo1ODozMC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9obWFjL2htYWMuaAkyMDEwLTAy LTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTEwMSw2ICsxMDEsNyBAQCB1bnNpZ25l ZCBjaGFyICpITUFDKGNvbnN0IEVWUF9NRCAqZXZwX21kCi0gCQkgICAgdW5zaWduZWQgaW50ICpt ZF9sZW4pOwotIGludCBITUFDX0NUWF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0NUWCAqc2N0 eCk7Ci0gCi0rdm9pZCBITUFDX0NUWF9zZXRfZmxhZ3MoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQg bG9uZyBmbGFncyk7Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotIH0KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9NYWtlZmlsZS5m aXBzCTIwMDktMDQtMDYgMTY6MzE6MzUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vTWFrZWZpbGUJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAx MDAKLUBAIC0zNCwxNCArMzQsMTQgQEAgR0VORVJBTD1NYWtlZmlsZSBSRUFETUUgY3J5cHRvLWxp Yi5jb20gaQotIAotIExJQj0gJChUT1ApL2xpYmNyeXB0by5hCi0gU0hBUkVEX0xJQj0gbGliY3J5 cHRvJChTSExJQl9FWFQpCi0tTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1lbV9jbHIuYyBtZW1f ZGJnLmMgY3ZlcnNpb24uYyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5jIHVpZC5jIG9fdGlt ZS5jIG9fc3RyLmMgb19kaXIuYwotLUxJQk9CSj0gY3J5cHRsaWIubyBtZW0ubyBtZW1fZGJnLm8g Y3ZlcnNpb24ubyBleF9kYXRhLm8gY3B0X2Vyci5vIGViY2RpYy5vIHVpZC5vIG9fdGltZS5vIG9f c3RyLm8gb19kaXIubyAkKENQVUlEX09CSikKLStMSUJTUkM9CWNyeXB0bGliLmMgbWVtLmMgbWVt X2Nsci5jIG1lbV9kYmcuYyBjdmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJyLmMgZWJjZGljLmMg dWlkLmMgb190aW1lLmMgb19zdHIuYyBvX2Rpci5jIG9faW5pdC5jIGZpcHNfZXJyLmMKLStMSUJP Qko9IGNyeXB0bGliLm8gbWVtLm8gbWVtX2RiZy5vIGN2ZXJzaW9uLm8gZXhfZGF0YS5vIGNwdF9l cnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBvX3N0ci5vIG9fZGlyLm8gb19pbml0Lm8gZmlw c19lcnIubyAkKENQVUlEX09CSikKLSAKLSBTUkM9ICQoTElCU1JDKQotIAotIEVYSEVBREVSPSBj cnlwdG8uaCBvcGVuc3Nsdi5oIG9wZW5zc2xjb25mLmggZWJjZGljLmggc3ltaGFja3MuaCBcCi0g CW9zc2xfdHlwLmgKLS1IRUFERVI9CWNyeXB0bGliLmggYnVpbGRpbmYuaCBtZDMyX2NvbW1vbi5o IG9fdGltZS5oIG9fc3RyLmggb19kaXIuaCAkKEVYSEVBREVSKQotK0hFQURFUj0JY3J5cHRsaWIu aCBidWlsZGluZi5oIGZpcHNfbG9jbC5oIG1kMzJfY29tbW9uLmggb190aW1lLmggb19zdHIuaCBv X2Rpci5oICQoRVhIRUFERVIpCi0gCi0gQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURF UikKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kYzIvbWRjMmRnc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzCTIwMDQtMDctMjUg MjE6MTA6NDEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v bWRjMi9tZGMyZGdzdC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAt NjEsNiArNjEsMTEgQEAKLSAjaW5jbHVkZSA8c3RyaW5nLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wv ZGVzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvbWRjMi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2VuZGlmCi0rCi0gCi0gI3VuZGVmIGMybAotICNkZWZpbmUgYzJsKGMsbCkJKGwgPSgoREVTX0xP TkcpKCooKGMpKyspKSkgICAgLCBcCi1AQCAtNzUsNyArODAsNyBAQAotIAkJCSooKGMpKyspPSh1 bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQotIAotIHN0YXRpYyB2b2lkIG1kYzJfYm9k eShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBsZW4pOwotLWlu dCBNREMyX0luaXQoTURDMl9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KE1EQzIpCi0g CXsKLSAJYy0+bnVtPTA7Ci0gCWMtPnBhZF90eXBlPTE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9tZGMyL21kYzIuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L21kYzIvbWRjMi5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vbWRjMi9tZGMyLmgu ZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL21kYzIvbWRjMi5oCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi1AQCAtODAsNyArODAsOSBAQCB0eXBlZGVmIHN0cnVjdCBtZGMyX2N0eF9zdAotIAlp bnQgcGFkX3R5cGU7IC8qIGVpdGhlciAxIG9yIDIsIGRlZmF1bHQgMSAqLwotIAl9IE1EQzJfQ1RY OwotIAotLQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9NREMyX0luaXQoTURD Ml9DVFggKmMpOwotKyNlbmRpZgotIGludCBNREMyX0luaXQoTURDMl9DVFggKmMpOwotIGludCBN REMyX1VwZGF0ZShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90 IGxlbik7Ci0gaW50IE1EQzJfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1EQzJfQ1RYICpjKTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vbWQyL21kMl9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzCTIwMDctMDgtMzEgMTI6MTI6MzUu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vbWQyL21kMl9k Z3N0LmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC02Miw2ICs2Miwx MSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL21kMi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2x2Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSAKLSBjb25zdCBjaGFyIE1EMl92ZXJzaW9uW109Ik1EMiIgT1BFTlNTTF9W RVJTSU9OX1BURVhUOwotIAotQEAgLTExNiw3ICsxMjEsNyBAQCBjb25zdCBjaGFyICpNRDJfb3B0 aW9ucyh2b2lkKQotIAkJcmV0dXJuKCJtZDIoaW50KSIpOwotIAl9Ci0gCi0taW50IE1EMl9Jbml0 KE1EMl9DVFggKmMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KE1EMikKLSAJewotIAljLT5udW09 MDsKLSAJbWVtc2V0KGMtPnN0YXRlLDAsc2l6ZW9mIGMtPnN0YXRlKTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kMi9tZDIuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL21kMi9tZDIuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kMi9tZDIu aC5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vbWQyL21kMi5oCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi1AQCAtODEsNiArODEsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDJzdGF0ZV9zdAotIAl9 IE1EMl9DVFg7Ci0gCi0gY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCk7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotK2ludCBwcml2YXRlX01EMl9Jbml0KE1EMl9DVFggKmMpOwotKyNlbmRpZgot IGludCBNRDJfSW5pdChNRDJfQ1RYICpjKTsKLSBpbnQgTUQyX1VwZGF0ZShNRDJfQ1RYICpjLCBj b25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgTUQyX0ZpbmFsKHVu c2lnbmVkIGNoYXIgKm1kLCBNRDJfQ1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTUvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v bWQ0L21kNF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZDQvbWQ0X2Rn c3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMJMjAxMC0wMi0xNiAyMjo1ODozMS4w MDAwMDAwMDAgKzAxMDAKLUBAIC01OSw2ICs1OSwxMSBAQAotICNpbmNsdWRlIDxzdGRpby5oPgot ICNpbmNsdWRlICJtZDRfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIE1ENF92ZXJzaW9u W109Ik1ENCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTcwLDcgKzc1LDcgQEAgY29u c3QgY2hhciBNRDRfdmVyc2lvbltdPSJNRDQiIE9QRU5TU0xfVgotICNkZWZpbmUgSU5JVF9EQVRB X0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNp Z25lZCBsb25nKTB4MTAzMjU0NzZMCi0gCi0taW50IE1ENF9Jbml0KE1ENF9DVFggKmMpCi0rRklQ U19OT05fRklQU19NRF9Jbml0KE1ENCkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsK LSAJYy0+QT1JTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L21kNC9tZDQuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kNC9tZDQuaAotLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21kNC9tZDQuaC5maXBzCTIwMTAtMDItMTYgMjI6 NTg6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vbWQ0 L21kNC5oCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTA1LDYgKzEw NSw5IEBAIHR5cGVkZWYgc3RydWN0IE1ENHN0YXRlX3N0Ci0gCXVuc2lnbmVkIGludCBudW07Ci0g CX0gTUQ0X0NUWDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTUQ0X0lu aXQoTUQ0X0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1ENF9Jbml0KE1ENF9DVFggKmMpOwotIGlu dCBNRDRfVXBkYXRlKE1ENF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwot IGludCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENF9DVFggKmMpOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMS4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDEw LTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTU5LDYgKzU5LDExIEBACi0gI2lu Y2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgIm1kNV9sb2NsLmgiCi0gI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIGNvbnN0 IGNoYXIgTUQ1X3ZlcnNpb25bXT0iTUQ1IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAt NzAsNyArNzUsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WCi0g I2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAotICNkZWZpbmUg SU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1pbnQgTUQ1X0luaXQo TUQ1X0NUWCAqYykKLStGSVBTX05PTl9GSVBTX01EX0luaXQoTUQ1KQotIAl7Ci0gCW1lbXNldCAo YywwLHNpemVvZigqYykpOwotIAljLT5BPUlOSVRfREFUQV9BOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vbWQ1L21kNS5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vbWQ1L21kNS5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vbWQ1L21kNS5oLmZp cHMJMjAxMC0wMi0xNiAyMjo1ODozMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE1L2NyeXB0by9tZDUvbWQ1LmgJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAx MDAKLUBAIC0xMDUsNiArMTA1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQ1c3RhdGVfc3QKLSAJdW5z aWduZWQgaW50IG51bTsKLSAJfSBNRDVfQ1RYOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStp bnQgcHJpdmF0ZV9NRDVfSW5pdChNRDVfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgTUQ1X0luaXQo TUQ1X0NUWCAqYyk7Ci0gaW50IE1ENV9VcGRhdGUoTUQ1X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0 YSwgc2l6ZV90IGxlbik7Ci0gaW50IE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ1X0NU WCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9tZW0uYy5maXBzIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21lbS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9j cnlwdG8vbWVtLmMuZmlwcwkyMDA4LTExLTEyIDA0OjU3OjQ3LjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL21lbS5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAw MDAwMDAwICswMTAwCi1AQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkICgqZnJlZV9sb2Nr ZWRfZnVuYykodm9pZCAqKSAKLSAKLSAvKiBtYXkgYmUgY2hhbmdlZCBhcyBsb25nIGFzICdhbGxv d19jdXN0b21pemVfZGVidWcnIGlzIHNldCAqLwotIC8qIFhYWCB1c2UgY29ycmVjdCBmdW5jdGlv biBwb2ludGVyIHR5cGVzICovCi0tI2lmZGVmIENSWVBUT19NREVCVUcKLSsjaWYgZGVmaW5lZChD UllQVE9fTURFQlVHKSAmJiAhZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0gLyogdXNlIGRlZmF1bHQg ZnVuY3Rpb25zIGZyb20gbWVtX2RiZy5jICovCi0gc3RhdGljIHZvaWQgKCptYWxsb2NfZGVidWdf ZnVuYykodm9pZCAqLGludCxjb25zdCBjaGFyICosaW50LGludCkKLSAJPSBDUllQVE9fZGJnX21h bGxvYzsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL29faW5pdC5jLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vb19pbml0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9vX2luaXQuYy5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vb19pbml0LmMJMjAxMC0wMi0xNiAy Mjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsODAgQEAKLSsvKiBvX2luaXQuYyAq LwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcp IGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09 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 ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhp YyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNyeXB0c29mdC5jb20p LiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCi0rICogSHVk c29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8ZV9vcy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKwotKy8qIFBlcmZvcm0gYW55IGVzc2VudGlh bCBPcGVuU1NMIGluaXRpYWxpemF0aW9uIG9wZXJhdGlvbnMuCi0rICogQ3VycmVudGx5IG9ubHkg c2V0cyBGSVBTIGNhbGxiYWNrcwotKyAqLwotKwotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnko dm9pZCkKLSsJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJc3RhdGljIGludCBkb25lID0gMDsK LSsJaWYgKCFkb25lKQotKwkJewotKyNpZmRlZiBDUllQVE9fTURFQlVHCi0rCQlDUllQVE9fbWFs bG9jX2RlYnVnX2luaXQoKTsKLSsjZW5kaWYKLSsJCWRvbmUgPSAxOwotKwkJfQotKyNlbmRpZgot Kwl9Ci0rCQkKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL29wZW5zc2xj b25mLmguaW4uZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9vcGVuc3NsY29uZi5oLmlu Ci0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzCTIw MDUtMTItMTYgMTE6Mzc6MjMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCAr MDEwMAotQEAgLTEsNSArMSwyMCBAQAotIC8qIGNyeXB0by9vcGVuc3NsY29uZi5oLmluICovCi0g Ci0rI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAotKwotKy8qIEluY2x1ZGUgYW55IHN5 bWJvbHMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgZXhwbGljaXRseSBzZXQgdG8gZW5hYmxlIGEgZmVh dHVyZQotKyAqIHRoYXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFrZWRlcGVuZC4KLSsgKgotKyAq IFtPdXIgIm1ha2UgZGVwZW5kIiBkb2Vzbid0IGFjdHVhbGx5IGxvb2sgYXQgdGhpcywgd2UgdXNl IGFjdHVhbCBidWlsZCBzZXR0aW5ncwotKyAqIGluc3RlYWQ7IHdlIHdhbnQgdG8gbWFrZSBpdCBl YXN5IHRvIHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2FibGVkIGFsZ29yaXRobXMuXQot KyAqLwotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFMKLSsj ZW5kaWYKLSsKLSsjZW5kaWYKLSsKLSAvKiBHZW5lcmF0ZSA4MDM4NiBjb2RlPyAqLwotICN1bmRl ZiBJMzg2X09OTFkKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3BrY3Mx Mi9wMTJfY3J0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9wa2NzMTIvcDEyX2Ny dC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBz CTIwMDktMDMtMDkgMTQ6MDg6MDQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAw MCArMDEwMAotQEAgLTU5LDYgKzU5LDEwIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1 ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSAK LSBzdGF0aWMgaW50IHBrY3MxMl9hZGRfYmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBi YWdzLCBQS0NTMTJfU0FGRUJBRyAqYmFnKTsKLUBAIC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBL Q1MxMl9jcmVhdGUoY2hhciAqcGFzcywgY2hhciAqCi0gCi0gCS8qIFNldCBkZWZhdWx0cyAqLwot IAlpZiAoIW5pZF9jZXJ0KQotKwkJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCWlmIChGSVBT X21vZGUoKSkKLSsJCQluaWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVE RVNfQ0JDOwotKwkJZWxzZQotKyNlbmRpZgotIAkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEEx QW5kNDBCaXRSQzJfQ0JDOwotKwkJfQotIAlpZiAoIW5pZF9rZXkpCi0gCQluaWRfa2V5ID0gTklE X3BiZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkM7Ci0gCWlmICghaXRlcikKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9tZF9yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzCTIwMDktMDEtMDMgMTA6MjU6MzIuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJ MjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMjYsNiArMTI2LDEwIEBA Ci0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj ZW5kaWYKLSsKLSAKLSAjaWZkZWYgQk5fREVCVUcKLSAjIGRlZmluZSBQUkVESUNUCi1AQCAtMzQy LDYgKzM0NiwxNCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNoCi0g I2VuZGlmCi0gCWludCBkb19zdGlyX3Bvb2wgPSAwOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYoRklQU19tb2RlKCkpCi0rCSAgICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9TU0xFQVlf UkFORF9CWVRFUyxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJICAgIHJldHVybiAwOwotKwkg ICAgfQotKyNlbmRpZgotKwotICNpZmRlZiBQUkVESUNUCi0gCWlmIChyYW5kX3ByZWRpY3RhYmxl KQotIAkJewotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9yYW5kX2Vy ci5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jCi0tLS0g b3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jLmZpcHMJMjAwNi0xMS0y MSAyMjoyOTo0MS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0 by9yYW5kL3JhbmRfZXJyLmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBA IC03MCw2ICs3MCwxMyBAQAotIAotIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfZnVu Y3RzW109Ci0gCXsKLSt7RVJSX0ZVTkMoUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRCks CSJFTkdfUkFORF9HRVRfUkFORF9NRVRIT0QifSwKLSt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFO RCksCSJGSVBTX1JBTkQifSwKLSt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORF9CWVRFUyksCSJG SVBTX1JBTkRfQllURVMifSwKLSt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQpLAki RklQU19SQU5EX1NFVF9EVCJ9LAotK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfRFQpLAkiRklQ U19TRVRfRFQifSwKLSt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCksCSJGSVBT X1NFVF9QUk5HX1NFRUQifSwKLSt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSks CSJGSVBTX1NFVF9URVNUX01PREUifSwKLSB7RVJSX0ZVTkMoUkFORF9GX1JBTkRfR0VUX1JBTkRf TUVUSE9EKSwJIlJBTkRfZ2V0X3JhbmRfbWV0aG9kIn0sCi0ge0VSUl9GVU5DKFJBTkRfRl9TU0xF QVlfUkFORF9CWVRFUyksCSJTU0xFQVlfUkFORF9CWVRFUyJ9LAotIHswLE5VTEx9Ci1AQCAtNzcs NyArODQsMTcgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9mdW5jdHNbXQotIAot IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfcmVhc29uc1tdPQotIAl7Ci0re0VSUl9S RUFTT04oUkFORF9SX05PTl9GSVBTX01FVEhPRCkgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAot K3tFUlJfUkVBU09OKFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKSAgICAgLCJub3QgaW4gdGVzdCBt b2RlIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX05PX0tFWV9TRVQpICAgICAgICAgICAsIm5vIGtl eSBzZXQifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNIKSwi cHJuZyBhc2tpbmcgZm9yIHRvbyBtdWNoIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfRVJS T1IpICAgICAgICAgICAsInBybmcgZXJyb3IifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19L RVlFRCkgICAgICAgICAgICwicHJuZyBrZXllZCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5H X05PVF9SRUtFWUVEKSAgICAgLCJwcm5nIG5vdCByZWtleWVkIn0sCi0re0VSUl9SRUFTT04oUkFO RF9SX1BSTkdfTk9UX1JFU0VFREVEKSAgICAsInBybmcgbm90IHJlc2VlZGVkIn0sCi0ge0VSUl9S RUFTT04oUkFORF9SX1BSTkdfTk9UX1NFRURFRCkgICAgICAsIlBSTkcgbm90IHNlZWRlZCJ9LAot K3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKSwicHJuZyBz ZWVkIG11c3Qgbm90IG1hdGNoIGtleSJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX1NUVUNL KSAgICAgICAgICAgLCJwcm5nIHN0dWNrIn0sCi0gezAsTlVMTH0KLSAJfTsKLSAKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vcmFuZC9yYW5kLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0 by9yYW5kL3JhbmQuaC5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzAuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmFuZC9yYW5kLmgJMjAxMC0wMi0xNiAyMjo1 ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMjgsMTEgKzEyOCwyOCBAQCB2b2lkIEVSUl9sb2Fk X1JBTkRfc3RyaW5ncyh2b2lkKTsKLSAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rp b25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwotKyNkZWZpbmUgUkFORF9GX0VOR19S QU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDgKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJ IDEwMwotKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9CWVRFUwkJCQkgMTAyCi0rI2RlZmluZSBS QU5EX0ZfRklQU19SQU5EX1NFVF9EVAkJCQkgMTA2Ci0rI2RlZmluZSBSQU5EX0ZfRklQU19TRVRf RFQJCQkJIDEwNAotKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRAkJCSAxMDcKLSsj ZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUJCQkgMTA1Ci0gI2RlZmluZSBSQU5EX0Zf UkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCi0gI2RlZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRf QllURVMJCQkgMTAwCi0gCi0gLyogUmVhc29uIGNvZGVzLiAqLwotKyNkZWZpbmUgUkFORF9SX05P Tl9GSVBTX01FVEhPRAkJCQkgMTA1Ci0rI2RlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJ CQkgMTA2Ci0rI2RlZmluZSBSQU5EX1JfTk9fS0VZX1NFVAkJCQkgMTA3Ci0rI2RlZmluZSBSQU5E X1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNICQkJIDEwMQotKyNkZWZpbmUgUkFORF9SX1BSTkdf RVJST1IJCQkJIDEwOAotKyNkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQJCQkJIDEwOQotKyNkZWZp bmUgUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQJCQkJIDEwMgotKyNkZWZpbmUgUkFORF9SX1BSTkdf Tk9UX1JFU0VFREVECQkJIDEwMwotICNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRAkJCQkg MTAwCi0rI2RlZmluZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWQkJIDExMAot KyNkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sJCQkJIDEwNAotIAotICNpZmRlZiAgX19jcGx1c3Bs dXMKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYW5kL3JhbmRfbGli LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYW5kL3JhbmRfbGliLmMKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYW5kL3JhbmRfbGliLmMuZmlwcwkyMDA4LTExLTEy IDA0OjU4OjA0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L3JhbmQvcmFuZF9saWIuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAg LTYwLDYgKzYwLDEyIEBACi0gI2luY2x1ZGUgPHRpbWUuaD4KLSAjaW5jbHVkZSAiY3J5cHRsaWIu aCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgInJhbmRfbGNsLmgiCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjZW5kaWYKLSsKLSAjaWZuZGVmIE9QRU5TU0xfTk9f RU5HSU5FCi0gI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+Ci0gI2VuZGlmCi1AQCAtMTAyLDgg KzEwOCwxOSBAQCBjb25zdCBSQU5EX01FVEhPRCAqUkFORF9nZXRfcmFuZF9tZXRob2QoCi0gCQkJ ZnVuY3RfcmVmID0gZTsKLSAJCWVsc2UKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CQkJZGVmYXVsdF9SQU5EX21ldGggPSBGSVBTX21vZGUoKSA/IEZJUFNfcmFuZF9tZXRob2QoKSA6 IFJBTkRfU1NMZWF5KCk7Ci0rCQl9Ci0rCWlmIChGSVBTX21vZGUoKQotKwkJJiYgZGVmYXVsdF9S QU5EX21ldGggIT0gRklQU19yYW5kX2NoZWNrKCkpCi0rCSAgICB7Ci0rCSAgICBSQU5EZXJyKFJB TkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCxSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJICAg IHJldHVybiAwOwotKwkgICAgfQotKyNlbHNlCi0gCQkJZGVmYXVsdF9SQU5EX21ldGggPSBSQU5E X1NTTGVheSgpOwotIAkJfQotKyNlbmRpZgotIAlyZXR1cm4gZGVmYXVsdF9SQU5EX21ldGg7Ci0g CX0KLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjMi9yYzIuaC5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjMi9yYzIuaAotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3JjMi9yYzIuaC5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzAuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmMyL3JjMi5oCTIwMTAtMDIt MTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNzksNyArNzksOSBAQCB0eXBlZGVmIHN0 cnVjdCByYzJfa2V5X3N0Ci0gCVJDMl9JTlQgZGF0YVs2NF07Ci0gCX0gUkMyX0tFWTsKLSAKLS0g Ci0rI2lmZGVmIE9QRU5TU0xfRklQUyAKLSt2b2lkIHByaXZhdGVfUkMyX3NldF9rZXkoUkMyX0tF WSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLGludCBiaXRzKTsKLSsj ZW5kaWYKLSB2b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7Ci0gdm9pZCBSQzJfZWNiX2VuY3J5cHQoY29uc3Qg dW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LFJDMl9LRVkgKmtleSwKLSAJCSAg ICAgaW50IGVuYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzIvcmMy X3NrZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjMi9yYzJfc2tleS5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmMyL3JjMl9za2V5LmMuZmlwcwkyMDA3LTA5 LTE4IDIzOjEwOjMyLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL3JjMi9yYzJfc2tleS5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1A QCAtNTcsNiArNTcsMTEgQEAKLSAgKi8KLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9yYzIuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotICNpbmNsdWRlICJyYzJfbG9jbC5oIgot IAotIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTZdPXsKLUBAIC05NCw4 ICs5OSwyMCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfdGFibGVbMjU2Ci0gICog QlNBRkUgdXNlcyB0aGUgJ3JldGFyZGVkJyB2ZXJzaW9uLiAgV2hhdCBJIHByZXZpb3VzbHkgc2hp cHBlZCBpcwotICAqIHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcgMTAyNCBmb3IgdGhlICdiaXRzJyBw YXJhbWV0ZXIuICBCc2FmZSB1c2VzCi0gICogYSB2ZXJzaW9uIHdoZXJlIHRoZSBiaXRzIHBhcmFt ZXRlciBpcyB0aGUgc2FtZSBhcyBsZW4qOCAqLwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSB2 b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hh ciAqZGF0YSwgaW50IGJpdHMpCi0gCXsKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJRklQU19CQURf QUJPUlQoUkMyKQotKwlwcml2YXRlX1JDMl9zZXRfa2V5KGtleSwgbGVuLCBkYXRhLCBiaXRzKTsK LSsJfQotK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0rCQkJCQkJCQlpbnQgYml0cykKLSsjZWxzZQotK3Zv aWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhLCBpbnQgYml0cykKLSsjZW5kaWYKLSsJewotIAlpbnQgaSxqOwotIAl1bnNpZ25lZCBj aGFyICprOwotIAlSQzJfSU5UICpraTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5 cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v cmM0L2FzbS9yYzQtczM5MHgucGwKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQv YXNtL3JjNC1zMzkweC5wbC5maXBzCTIwMDktMDItMTIgMTU6NDg6NDkuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwJMjAx MC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yMDIsNCArMjAyLDYgQEAgUkM0 X29wdGlvbnM6Ci0gLnN0cmluZwkicmM0KDh4LGNoYXIpIgotIF9fXwotIAotKyRjb2RlID1+IHMv UkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsK LSsKLSBwcmludCAkY29kZTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3Jj NC9hc20vcmM0LXg4Nl82NC5wbC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9h c20vcmM0LXg4Nl82NC5wbAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9hc20v cmM0LXg4Nl82NC5wbC5maXBzCTIwMDktMDQtMjcgMjE6MzE6MDQuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsCTIwMTAt MDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNDk5LDYgKzQ5OSw4IEBAIF9fXwot IAotICRjb2RlID1+IHMvIyhbYndkXSkvJDEvZ207Ci0gCi0rJGNvZGUgPX4gcy9SQzRfc2V0X2tl eS9wcml2YXRlX1JDNF9zZXRfa2V5L2cgaWYgKCRFTlZ7RklQU30gbmUgIiIpOwotKwotIHByaW50 ICRjb2RlOwotIAotIGNsb3NlIFNURE9VVDsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L3JjNC9hc20vcmM0LTU4Ni5wbAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9h c20vcmM0LTU4Ni5wbC5maXBzCTIwMDctMTItMDIgMjI6MzI6MDMuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsCTIwMTAtMDIt MTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTY2LDggKzE2NiwxMiBAQCAkaWR4PSJl ZHgiOwotIAotICZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKLSAKLSskc2V0 a2V5ZnVuYyA9ICJSQzRfc2V0X2tleSI7Ci0rJHNldGtleWZ1bmMgPSAicHJpdmF0ZV9SQzRfc2V0 X2tleSIgaWYgKCRFTlZ7RklQU30gbmUgIiIpOwotKwotKwotICMgdm9pZCBSQzRfc2V0X2tleShS QzRfS0VZICprZXksaW50IGxlbixjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLS0mZnVuY3Rp b25fYmVnaW4oIlJDNF9zZXRfa2V5Iik7Ci0rJmZ1bmN0aW9uX2JlZ2luKCRzZXRrZXlmdW5jKTsK LSAJJm1vdgkoJG91dCwmd3BhcmFtKDApKTsJCSMgbG9hZCBrZXkKLSAJJm1vdgkoJGlkaSwmd3Bh cmFtKDEpKTsJCSMgbG9hZCBsZW4KLSAJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsJCSMgbG9hZCBk YXRhCi1AQCAtMjQ1LDcgKzI0OSw3IEBAICRpZHg9ImVkeCI7Ci0gCSZ4b3IJKCJlYXgiLCJlYXgi KTsKLSAJJm1vdgkoJkRXUCgtOCwkb3V0KSwiZWF4Iik7CQkjIGtleS0+eD0wOwotIAkmbW92CSgm RFdQKC00LCRvdXQpLCJlYXgiKTsJCSMga2V5LT55PTA7Ci0tJmZ1bmN0aW9uX2VuZCgiUkM0X3Nl dF9rZXkiKTsKLSsmZnVuY3Rpb25fZW5kKCRzZXRrZXlmdW5jKTsKLSAKLSAjIGNvbnN0IGNoYXIg KlJDNF9vcHRpb25zKHZvaWQpOwotICZmdW5jdGlvbl9iZWdpbl9CKCJSQzRfb3B0aW9ucyIpOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L01ha2VmaWxlLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vcmM0L01ha2VmaWxlLmZpcHMJMjAwOS0wMi0xMSAxMTowMTozNi4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvTWFrZWZpbGUJMjAx MC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yMSw4ICsyMSw4IEBAIFRFU1Q9 cmM0dGVzdC5jCi0gQVBQUz0KLSAKLSBMSUI9JChUT1ApL2xpYmNyeXB0by5hCi0tTElCU1JDPXJj NF9za2V5LmMgcmM0X2VuYy5jCi0tTElCT0JKPSQoUkM0X0VOQykKLStMSUJTUkM9cmM0X3NrZXku YyByYzRfZW5jLmMgcmM0X2ZibGsuYwotK0xJQk9CSj0kKFJDNF9FTkMpIHJjNF9mYmxrLm8KLSAK LSBTUkM9ICQoTElCU1JDKQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8v cmM0L3JjNF9mYmxrLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvcmM0X2Zi bGsuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JjNC9yYzRfZmJsay5jLmZpcHMJ MjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE1L2NyeXB0by9yYzQvcmM0X2ZibGsuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCAr MDEwMAotQEAgLTAsMCArMSw3NSBAQAotKy8qIGNyeXB0by9yYzQvcmM0X2ZibGsuYyAqLwotKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICovCi0rCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+Ci0rI2luY2x1ZGUgInJj NF9sb2NsLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNlbmRpZgotKwotKy8qIEZJUFMgbW9kZSBibG9ja2luZyBmb3IgUkM0IGhhcyB0 byBiZSBkb25lIHNlcGFyYXRlbHkgc2luY2UgUkM0X3NldF9rZXkKLSsgKiBtYXkgYmUgaW1wbGVt ZW50ZWQgaW4gYW4gYXNzZW1ibHkgbGFuZ3VhZ2UgZmlsZS4KLSsgKi8KLSsKLSsjaWZkZWYgT1BF TlNTTF9GSVBTCi0rdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0rCXsKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJRklQU19C QURfQUJPUlQoUkM0KQotKwlwcml2YXRlX1JDNF9zZXRfa2V5KGtleSwgbGVuLCBkYXRhKTsKLSsJ fQotKyNlbmRpZgotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L3Jj NC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L3JjNC5oCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L3JjNC5oLmZpcHMJMjAxMC0wMi0xNiAyMjo1ODozMS4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvcmM0LmgJ MjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC03OCw2ICs3OCw5IEBAIHR5 cGVkZWYgc3RydWN0IHJjNF9rZXlfc3QKLSAKLSAgCi0gY29uc3QgY2hhciAqUkM0X29wdGlvbnMo dm9pZCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3ZvaWQgcHJpdmF0ZV9SQzRfc2V0X2tleShS QzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwotKyNlbmRp ZgotIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhKTsKLSB2b2lkIFJDNChSQzRfS0VZICprZXksIHNpemVfdCBsZW4sIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluZGF0YSwKLSAJCXVuc2lnbmVkIGNoYXIgKm91dGRhdGEpOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmM0L3JjNF9za2V5LmMuZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvcmM0X3NrZXkuYwotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3JjNC9yYzRfc2tleS5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMy4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yYzQvcmM0X3NrZXku YwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTU5LDYgKzU5LDExIEBA Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+Ci0gI2luY2x1ZGUgInJjNF9sb2NsLmgiCi0gI2lu Y2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotKwotIAotIGNvbnN0IGNoYXIgUkM0X3ZlcnNpb25bXT0iUkM0IiBPUEVOU1NMX1ZFUlNJT05f UFRFWFQ7Ci0gCi1AQCAtODUsNyArOTAsMTEgQEAgY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9p ZCkKLSAgKiBEYXRlOiBXZWQsIDE0IFNlcCAxOTk0IDA2OjM1OjMxIEdNVAotICAqLwotIAotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSt2b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5 LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQotKyNlbHNlCi0gdm9pZCBSQzRf c2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEp Ci0rI2VuZGlmCi0gCXsKLSAgICAgICAgIHJlZ2lzdGVyIFJDNF9JTlQgdG1wOwotICAgICAgICAg cmVnaXN0ZXIgaW50IGlkMSxpZDI7Ci1AQCAtMTI2LDcgKzEzNSwxMiBAQCB2b2lkIFJDNF9zZXRf a2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgCi0gCQkgKiBtb2R1bGUuLi4KLSAJCSAqCQkJCTxh cHByb0BmeS5jaGFsbWVycy5zZT4KLSAJCSAqLwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCXVu c2lnbmVkIGxvbmcgKmlhMzJjYXBfcHRyID0gT1BFTlNTTF9pYTMyY2FwX2xvYygpOwotKwkJaWYg KGlhMzJjYXBfcHRyICYmICgqaWEzMmNhcF9wdHIgJiAoMTw8MjgpKSkgewotKyNlbHNlCi0gCQlp ZiAoT1BFTlNTTF9pYTMyY2FwX1AgJiAoMTw8MjgpKSB7Ci0rI2VuZGlmCi0gCQkJdW5zaWduZWQg Y2hhciAqY3A9KHVuc2lnbmVkIGNoYXIgKilkOwotIAotIAkJCWZvciAoaT0wO2k8MjU2O2krKykg Y3BbaV09aTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JpcGVtZC9yaXBl bWQuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaAotLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaC5maXBzCTIwMTAtMDIt MTYgMjI6NTg6MzAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vcmlwZW1kL3JpcGVtZC5oCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1A QCAtOTEsNiArOTEsOSBAQCB0eXBlZGVmIHN0cnVjdCBSSVBFTUQxNjBzdGF0ZV9zdAotIAl1bnNp Z25lZCBpbnQgICBudW07Ci0gCX0gUklQRU1EMTYwX0NUWDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0raW50IHByaXZhdGVfUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7Ci0rI2Vu ZGlmCi0gaW50IFJJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpOwotIGludCBSSVBFTUQx NjBfVXBkYXRlKFJJUEVNRDE2MF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4p OwotIGludCBSSVBFTUQxNjBfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFJJUEVNRDE2MF9DVFgg KmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0 LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwotLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMJMjAwNy0w MS0yMSAxNDowNzoxMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9yaXBlbWQvcm1kX2Rnc3QuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEw MAotQEAgLTU5LDYgKzU5LDExIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgInJt ZF9sb2NsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgotKyNlbmRpZgotKwotIAotIGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1N RDE2MCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTY5LDcgKzc0LDcgQEAgY29uc3Qg Y2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIgotICAgICAgdm9pZCByaXBlbWQxNjBf YmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3QgbnVtKTsKLSAj ICBlbmRpZgotIAotLWludCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKQotK0ZJUFNf Tk9OX0ZJUFNfTURfSW5pdChSSVBFTUQxNjApCi0gCXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpj KSk7Ci0gCWMtPkE9UklQRU1EMTYwX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3Jz YV9lYXkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlw cwkyMDA4LTA5LTE0IDE1OjUxOjQ0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAg KzAxMDAKLUBAIC0xMTQsNiArMTE0LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSAjaWZuZGVmIFJTQV9OVUxMCi0gCi1AQCAtMTM4 LDcgKzE0Miw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9wa2NzMV9lYXlfbWV0aD17Ci0gCUJO X21vZF9leHBfbW9udCwgLyogWFhYIHByb2JhYmx5IHdlIHNob3VsZCBub3QgdXNlIE1vbnRnb21l cnkgaWYgIGUgPT0gMyAqLwotIAlSU0FfZWF5X2luaXQsCi0gCVJTQV9lYXlfZmluaXNoLAotLQkw LCAvKiBmbGFncyAqLwotKwlSU0FfRkxBR19GSVBTX01FVEhPRCwgLyogZmxhZ3MgKi8KLSAJTlVM TCwKLSAJMCwgLyogcnNhX3NpZ24gKi8KLSAJMCwgLyogcnNhX3ZlcmlmeSAqLwotQEAgLTE1MCw2 ICsxNTQsMTYgQEAgY29uc3QgUlNBX01FVEhPRCAqUlNBX1BLQ1MxX1NTTGVheSh2b2lkKQotIAly ZXR1cm4oJnJzYV9wa2NzMV9lYXlfbWV0aCk7Ci0gCX0KLSAKLSsvKiBVc2FnZSBleGFtcGxlOwot KyAqICAgIE1PTlRfSEVMUEVSKHJzYSwgYm5fY3R4LCBwLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdf Q0FDSEVfUFJJVkFURSwgZ290byBlcnIpOwotKyAqLwotKyNkZWZpbmUgTU9OVF9IRUxQRVIocnNh LCBjdHgsIG0sIHByZV9jb25kLCBlcnJfaW5zdHIpIFwKLSsJaWYoKHByZV9jb25kKSAmJiAoKHJz YSktPl9tZXRob2RfbW9kXyMjbSA9PSBOVUxMKSAmJiBcCi0rCQkJIUJOX01PTlRfQ1RYX3NldF9s b2NrZWQoJigocnNhKS0+X21ldGhvZF9tb2RfIyNtKSwgXAotKwkJCQlDUllQVE9fTE9DS19SU0Es IFwKLSsJCQkJKHJzYSktPm0sIChjdHgpKSkgXAotKwkJZXJyX2luc3RyCi0rCi0gc3RhdGljIGlu dCBSU0FfZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpm cm9tLAotIAkgICAgIHVuc2lnbmVkIGNoYXIgKnRvLCBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCi0g CXsKLUBAIC0xNTgsNiArMTcyLDIzIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlw dChpbnQgZmwKLSAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7 Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlm IChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0Ff RUFZX1BVQkxJQ19FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290 byBlcnI7Ci0rCQkJfQotKwotKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JT QV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZ X1BVQkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAt MTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4g T1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9SU0Ff RUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtMjIzLDkg KzI1NCw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmwKLSAJCWdv dG8gZXJyOwotIAkJfQotIAotLQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJ QykKLS0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBD UllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKLS0JCQlnb3RvIGVycjsKLSsJTU9OVF9IRUxQ RVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8g ZXJyKTsKLSAKLSAJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYscnNhLT5lLHJzYS0+ bixjdHgsCi0gCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3RvIGVycjsKLUBAIC0zNTUsNiArMzg0 LDIzIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKLSAJaW50IGxv Y2FsX2JsaW5kaW5nID0gMDsKLSAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNf c2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJ VkFURV9FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJZ290byBlcnI7 Ci0rCQkJfQotKwotKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZB VEVfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0r CQkJfQotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwp IGdvdG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLSAJZiAgID0gQk5fQ1RYX2dldChjdHgp OwotQEAgLTQzMiw5ICs0NzgsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0 KGludCBmCi0gCQllbHNlCi0gCQkJZD0gcnNhLT5kOwotIAotLQkJaWYgKHJzYS0+ZmxhZ3MgJiBS U0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQkJaWYoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJz YS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCi0tCQkJCWdv dG8gZXJyOwotKwkJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKLSAKLSAJCWlmICghcnNhLT5tZXRoLT5ibl9tb2Rf ZXhwKHJldCxmLGQscnNhLT5uLGN0eCwKLSAJCQkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBl cnI7Ci1AQCAtNDg4LDYgKzUzMiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNy eXB0KGludCBmCi0gCWludCBsb2NhbF9ibGluZGluZyA9IDA7Ci0gCUJOX0JMSU5ESU5HICpibGlu ZGluZyA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkp Ci0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJy KEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmIChCTl9udW1fYml0cyhyc2EtPm4p IDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJCXsKLSsJCQlSU0FlcnIo UlNBX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7 Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJaWYoKGN0eCA9IEJO X0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotIAlm ICAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci1AQCAtNTU1LDkgKzYxNiw3IEBAIHN0YXRpYyBpbnQgUlNB X2VheV9wcml2YXRlX2RlY3J5cHQoaW50IGYKLSAJCWVsc2UKLSAJCQlkID0gcnNhLT5kOwotIAot LQkJaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQkJaWYgKCFCTl9N T05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwg cnNhLT5uLCBjdHgpKQotLQkJCQlnb3RvIGVycjsKLSsJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBu LCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCQlpZiAo IXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixkLHJzYS0+bixjdHgsCi0gCQkJCXJzYS0+X21l dGhvZF9tb2RfbikpCi0gCQkgIGdvdG8gZXJyOwotQEAgLTYxNyw2ICs2NzYsMjMgQEAgc3RhdGlj IGludCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGludCBmbAotIAl1bnNpZ25lZCBjaGFyICpidWY9 TlVMTDsKLSAJQk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm IChGSVBTX21vZGUoKSkKLSsJCXsKLSsJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCQkJ ewotKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsRklQU19SX0ZJUFNf U0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0rCi0rCQlpZiAoQk5fbnVt X2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKLSsJCQl7 Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsKLSAJ aWYgKEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQot IAkJewotIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01PRFVM VVNfVE9PX0xBUkdFKTsKLUBAIC02NjcsOSArNzQzLDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1 YmxpY19kZWNyeXB0KGludCBmbAotIAkJZ290byBlcnI7Ci0gCQl9Ci0gCi0tCWlmIChyc2EtPmZs YWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9j a2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQot LQkJCWdvdG8gZXJyOwotKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJT QV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAotIAlpZiAoIXJzYS0+bWV0aC0+Ym5f bW9kX2V4cChyZXQsZixyc2EtPmUscnNhLT5uLGN0eCwKLSAJCXJzYS0+X21ldGhvZF9tb2Rfbikp IGdvdG8gZXJyOwotQEAgLTcxNyw2ICs3OTEsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9kX2V4 cChCSUdOVU0gKnIwLCBjCi0gCUJJR05VTSAqcjEsKm0xLCp2cmZ5OwotIAlCSUdOVU0gbG9jYWxf ZG1wMSxsb2NhbF9kbXExLGxvY2FsX2MsbG9jYWxfcjE7Ci0gCUJJR05VTSAqZG1wMSwqZG1xMSwq YywqcHIxOwotKwlpbnQgYm5fZmxhZ3M7Ci0gCWludCByZXQ9MDsKLSAKLSAJQk5fQ1RYX3N0YXJ0 KGN0eCk7Ci1AQCAtNzI0LDQxICs3OTksMzEgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAo QklHTlVNICpyMCwgYwotIAltMSA9IEJOX0NUWF9nZXQoY3R4KTsKLSAJdnJmeSA9IEJOX0NUWF9n ZXQoY3R4KTsKLSAKLS0JewotLQkJQklHTlVNIGxvY2FsX3AsIGxvY2FsX3E7Ci0tCQlCSUdOVU0g KnAgPSBOVUxMLCAqcSA9IE5VTEw7Ci0tCi0tCQkvKiBNYWtlIHN1cmUgQk5fbW9kX2ludmVyc2Ug aW4gTW9udGdvbWVyeSBpbnRpYWxpemF0aW9uIHVzZXMgdGhlCi0tCQkgKiBCTl9GTEdfQ09OU1RU SU1FIGZsYWcgKHVubGVzcyBSU0FfRkxBR19OT19DT05TVFRJTUUgaXMgc2V0KQotLQkJICovCi0t CQlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKLS0JCQl7Ci0tCQkJ Qk5faW5pdCgmbG9jYWxfcCk7Ci0tCQkJcCA9ICZsb2NhbF9wOwotLQkJCUJOX3dpdGhfZmxhZ3Mo cCwgcnNhLT5wLCBCTl9GTEdfQ09OU1RUSU1FKTsKLS0KLS0JCQlCTl9pbml0KCZsb2NhbF9xKTsK LS0JCQlxID0gJmxvY2FsX3E7Ci0tCQkJQk5fd2l0aF9mbGFncyhxLCByc2EtPnEsIEJOX0ZMR19D T05TVFRJTUUpOwotLQkJCX0KLS0JCWVsc2UKLS0JCQl7Ci0tCQkJcCA9IHJzYS0+cDsKLS0JCQlx ID0gcnNhLT5xOwotLQkJCX0KLSsJLyogTWFrZSBzdXJlIG1vZF9pbnZlcnNlIGluIG1vbnRnb21l cmV5IGludGlhbGl6YXRpb24gdXNlIGNvcnJlY3QgCi0rCSAqIEJOX0ZMR19DT05TVFRJTUUgZmxh Zy4KLSsJICovCi0rCWJuX2ZsYWdzID0gcnNhLT5wLT5mbGFnczsKLSsJaWYgKCEocnNhLT5mbGFn cyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0rCQl7Ci0rCQlyc2EtPnAtPmZsYWdzIHw9IEJO X0ZMR19DT05TVFRJTUU7Ci0rCQl9Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBwLCByc2EtPmZs YWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIpOwotKwkvKiBXZSByZXN0b3Jl IGJuX2ZsYWdzIGJhY2sgKi8KLSsJcnNhLT5wLT5mbGFncyA9IGJuX2ZsYWdzOwotIAotLQkJaWYg KHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFKQotLQkJCXsKLS0JCQlpZiAoIUJO X01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfcCwgQ1JZUFRPX0xPQ0tfUlNB LCBwLCBjdHgpKQotLQkJCQlnb3RvIGVycjsKLS0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2Nr ZWQoJnJzYS0+X21ldGhvZF9tb2RfcSwgQ1JZUFRPX0xPQ0tfUlNBLCBxLCBjdHgpKQotLQkJCQln b3RvIGVycjsKLS0JCQl9Ci0tCX0KLSsgICAgICAgIC8qIE1ha2Ugc3VyZSBtb2RfaW52ZXJzZSBp biBtb250Z29tZXJleSBpbnRpYWxpemF0aW9uIHVzZSBjb3JyZWN0Ci0rICAgICAgICAgKiBCTl9G TEdfQ09OU1RUSU1FIGZsYWcuCi0rICAgICAgICAgKi8KLSsJYm5fZmxhZ3MgPSByc2EtPnEtPmZs YWdzOwotKwlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKLSsJCXsK LSsJCXJzYS0+cS0+ZmxhZ3MgfD0gQk5fRkxHX0NPTlNUVElNRTsKLSsJCX0KLSsJTU9OVF9IRUxQ RVIocnNhLCBjdHgsIHEsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3Rv IGVycik7Ci0rCS8qIFdlIHJlc3RvcmUgYm5fZmxhZ3MgYmFjayAqLwotKwlyc2EtPnEtPmZsYWdz ID0gYm5fZmxhZ3M7CQotIAotLQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJ QykKLS0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBD UllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKLS0JCQlnb3RvIGVycjsKLSsJTU9OVF9IRUxQ RVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8g ZXJyKTsKLSAKLSAJLyogY29tcHV0ZSBJIG1vZCBxICovCi0gCWlmICghKHJzYS0+ZmxhZ3MgJiBS U0FfRkxBR19OT19DT05TVFRJTUUpKQotQEAgLTg3NSw2ICs5NDAsOSBAQCBlcnI6Ci0gCi0gc3Rh dGljIGludCBSU0FfZWF5X2luaXQoUlNBICpyc2EpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJcnNhLT5mbGFnc3w9UlNBX0ZM QUdfQ0FDSEVfUFVCTElDfFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEU7Ci0gCXJldHVybigxKTsKLSAJ fQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JzYS9yc2FfZXJyLmMKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAwOC0xMi0yOSAxNzoxMTo1Ni4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yc2EvcnNhX2Vy ci5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTExLDggKzExMSwx MiBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfZnVuY3RzW109Ci0ge0VSUl9GVU5D KFJTQV9GX1JTQV9QUklOVF9GUCksCSJSU0FfcHJpbnRfZnAifSwKLSB7RVJSX0ZVTkMoUlNBX0Zf UlNBX1BSSVZfREVDT0RFKSwJIlJTQV9QUklWX0RFQ09ERSJ9LAotIHtFUlJfRlVOQyhSU0FfRl9S U0FfUFJJVl9FTkNPREUpLAkiUlNBX1BSSVZfRU5DT0RFIn0sCi0re0VSUl9GVU5DKFJTQV9GX1JT QV9QUklWQVRFX0VOQ1JZUFQpLAkiUlNBX3ByaXZhdGVfZW5jcnlwdCJ9LAotIHtFUlJfRlVOQyhS U0FfRl9SU0FfUFVCX0RFQ09ERSksCSJSU0FfUFVCX0RFQ09ERSJ9LAotK3tFUlJfRlVOQyhSU0Ff Rl9SU0FfUFVCTElDX0RFQ1JZUFQpLAkiUlNBX3B1YmxpY19kZWNyeXB0In0sCi0ge0VSUl9GVU5D KFJTQV9GX1JTQV9TRVRVUF9CTElORElORyksCSJSU0Ffc2V0dXBfYmxpbmRpbmcifSwKLSt7RVJS X0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCksCSJSU0Ffc2V0X2RlZmF1bHRfbWV0 aG9kIn0sCi0re0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfTUVUSE9EKSwJIlJTQV9zZXRfbWV0aG9k In0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOKSwJIlJTQV9zaWduIn0sCi0ge0VSUl9GVU5D KFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HKSwJIlJTQV9zaWduX0FTTjFfT0NURVRf U1RSSU5HIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9WRVJJRlkpLAkiUlNBX3ZlcmlmeSJ9LAot QEAgLTE1NSwxMCArMTU5LDEyIEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9yZWFz b25zW10KLSB7RVJSX1JFQVNPTihSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpICAgICwia2V5IHNp emUgdG9vIHNtYWxsIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElEKSAg ICAsImxhc3Qgb2N0ZXQgaW52YWxpZCJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX01PRFVMVVNfVE9P X0xBUkdFKSAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAotK3tFUlJfUkVBU09OKFJTQV9SX05P Tl9GSVBTX01FVEhPRCkgICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKLSB7RVJSX1JFQVNPTihS U0FfUl9OT19QVUJMSUNfRVhQT05FTlQpICAgICwibm8gcHVibGljIGV4cG9uZW50In0sCi0ge0VS Ul9SRUFTT04oUlNBX1JfTlVMTF9CRUZPUkVfQkxPQ0tfTUlTU0lORyksIm51bGwgYmVmb3JlIGJs b2NrIG1pc3NpbmcifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUSkg ICwibiBkb2VzIG5vdCBlcXVhbCBwIHEifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9PQUVQX0RFQ09E SU5HX0VSUk9SKSAgICwib2FlcCBkZWNvZGluZyBlcnJvciJ9LAotK3tFUlJfUkVBU09OKFJTQV9S X09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpLCJvcGVyYXRpb24gbm90IGFsbG93 ZWQgaW4gZmlwcyBtb2RlIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQ T1JURURfRk9SX1RISVNfS0VZVFlQRSksIm9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciB0aGlz IGtleXR5cGUifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRCkgICwi cGFkZGluZyBjaGVjayBmYWlsZWQifSwKLSB7RVJSX1JFQVNPTihSU0FfUl9QX05PVF9QUklNRSkg ICAgICAgICAgICwicCBub3QgcHJpbWUifSwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yc2Ev cnNhX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3JzYV9nZW4uYy5m aXBzCTIwMDctMDMtMjggMDI6MTU6MjcuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vcnNhL3JzYV9nZW4uYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAw MCArMDEwMAotQEAgLTY3LDYgKzY3LDgyIEBACi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX2xv Y2wuaCIKLSsKLStzdGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAwOwotKwotK3Zv aWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCkKLSsJewotKwlmaXBzX3JzYV9wYWlyd2lz ZV9mYWlsID0gMTsKLSsJfQotKwotK2ludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSkKLSsJewot Kwljb25zdCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsK LSsJdW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBOVUxMOwotKwlpbnQgbGVu LCByZXQgPSAwOwotKwlFVlBfUEtFWSAqcGs7Ci0rCi0rCWlmICgocGs9RVZQX1BLRVlfbmV3KCkp ID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsKLSsJRVZQX1BLRVlfc2V0MV9SU0EocGssIHJzYSk7 Ci0rCi0rCS8qIFBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgc2lnbmF0dXJlIHRlc3QgKi8K LSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJTlVMTCwg MCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKLSsJCXx8ICFm aXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJTlVMTCwgMCwgRVZQX3No YTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLCBOVUxMKQotKwkJfHwgIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKLSsJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1BTUywgTlVMTCkpCi0rCQlnb3RvIGVycjsKLSsJLyogTm93IHBlcmZv cm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRlc3QgKi8KLSsJY3RidWYg PSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKLSsJaWYgKCFjdGJ1ZikKLSsJCWdvdG8g ZXJyOwotKwotKwlsZW4gPSBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAxLCB0YnMs IGN0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsJaWYgKGxlbiA8PSAwKQotKwkJZ290 byBlcnI7Ci0rCS8qIENoZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRjaCBwbGFpbnRleHQgKi8K LSsJaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0gMSkpICYmICFtZW1jbXAodGJzLCBjdGJ1Ziwg bGVuKSkKLSsJCWdvdG8gZXJyOwotKwlwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJz YSkpOwotKwotKwlpZiAoIXB0YnVmKQotKwkJZ290byBlcnI7Ci0rCWxlbiA9IFJTQV9wcml2YXRl X2RlY3J5cHQobGVuLCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwotKwlp ZiAobGVuICE9IChzaXplb2YodGJzKSAtIDEpKQotKwkJZ290byBlcnI7Ci0rCWlmIChtZW1jbXAo cHRidWYsIHRicywgbGVuKSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotKwlpZiAo IXB0YnVmKQotKwkJZ290byBlcnI7Ci0rCQotKwllcnI6Ci0rCWlmIChyZXQgPT0gMCkKLSsJCXsK LSsJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfQ0hF Q0tfUlNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7Ci0rCQl9Ci0rCi0rCWlmIChjdGJ1 ZikKLSsJCU9QRU5TU0xfZnJlZShjdGJ1Zik7Ci0rCWlmIChwdGJ1ZikKLSsJCU9QRU5TU0xfZnJl ZShwdGJ1Zik7Ci0rCWlmIChwaykKLSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwotKwlyZXR1cm4g cmV0OwotKwl9Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNB ICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYik7Ci0gCi1AQCAt OTAsNiArMTY2LDIzIEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCAK LSAJaW50IGJpdHNwLGJpdHNxLG9rPSAtMSxuPTA7Ci0gCUJOX0NUWCAqY3R4PU5VTEw7Ci0gCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkgICAgCXsKLSsJCSAgICBGSVBTZXJyKEZJUFNfRl9SU0Ff QlVJTFRJTl9LRVlHRU4sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIAlyZXR1 cm4gMDsKLSsJICAgIAl9Ci0rCi0rCQlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01P RFVMVVNfQklUUykKLSsJCSAgICB7Ci0rCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5f S0VZR0VOLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKLSsJCSAgICByZXR1cm4gMDsKLSsJCQl9Ci0r CQl9Ci0rI2VuZGlmCi0rCi0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkg Z290byBlcnI7Ci0gCUJOX0NUWF9zdGFydChjdHgpOwotQEAgLTIwMSw2ICsyOTQsMTcgQEAgc3Rh dGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIAotIAkJcCA9IHJzYS0+cDsKLSAJ aWYgKCFCTl9tb2RfaW52ZXJzZShyc2EtPmlxbXAscnNhLT5xLHAsY3R4KSkgZ290byBlcnI7Ci0g Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAo Zmlwc19yc2FfcGFpcndpc2VfZmFpbCkKLSsJCQlCTl9hZGRfd29yZChyc2EtPm4sIDEpOwotKwot KwkJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCi0rCQkgICAgZ290byBlcnI7Ci0rCQl9Ci0rI2Vu ZGlmCi0rCi0gCW9rPTE7Ci0gZXJyOgotIAlpZiAob2sgPT0gLTEpCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2Ny eXB0by9yc2EvcnNhLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yc2EvcnNhLmgu ZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvY3J5cHRvL3JzYS9yc2EuaAkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCAr MDEwMAotQEAgLTc0LDYgKzc0LDIxIEBACi0gI2Vycm9yIFJTQSBpcyBkaXNhYmxlZC4KLSAjZW5k aWYKLSAKLSsvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBSU0EgbWV0aG9kIGlzIEZJUFMgY29t cGxpYW50IGFuZCBjYW4gYmUgdXNlZAotKyAqIGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4g dGhlIHZhbGlkYXRlZCBtb2R1bGUgbWV0aG9kLiBJZiBhbgotKyAqIGFwcGxpY2F0aW9uIHNldHMg dGhpcyBmbGFnIGluIGl0cyBvd24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5Ci0rICog dG8gZW5zdXJlIHRoZSByZXN1bHQgaXMgY29tcGxpYW50LgotKyAqLwotKwotKyNkZWZpbmUgUlNB X0ZMQUdfRklQU19NRVRIT0QJCQkweDA0MDAKLSsKLSsvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRo ZSBvcGVyYXRpb25zIG5vcm1hbGx5IGRpc2FibGVkIGluIEZJUFMgbW9kZSBhcmUKLSsgKiBwZXJt aXR0ZWQgaXQgaXMgdGhlbiB0aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3Vy ZSB0aGF0IHRoZQotKyAqIHVzYWdlIGlzIGNvbXBsaWFudC4KLSsgKi8KLSsKLSsjZGVmaW5lIFJT QV9GTEFHX05PTl9GSVBTX0FMTE9XCQkJMHgwNDAwCi0rCi0gI2lmZGVmICBfX2NwbHVzcGx1cwot IGV4dGVybiAiQyIgewotICNlbmRpZgotQEAgLTE2NCw2ICsxNzksOCBAQCBzdHJ1Y3QgcnNhX3N0 Ci0gIyBkZWZpbmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUwkxNjM4NAotICNlbmRpZgot IAotKyNkZWZpbmUgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKLSsKLSAj aWZuZGVmIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUwotICMgZGVmaW5lIE9QRU5TU0xf UlNBX1NNQUxMX01PRFVMVVNfQklUUwkzMDcyCi0gI2VuZGlmCi1AQCAtMjY3LDYgKzI4NCwxMSBA QCBSU0EgKglSU0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1bnNpZ25lCi0gCi0gLyogTmV3IHZl cnNpb24gKi8KLSBpbnQJUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJ R05VTSAqZSwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNh LCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAotKwkJCWNv bnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKLSsJ CQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEs Ci0rCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotK2ludCBSU0FfWDkzMV9nZW5l cmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNC ICpjYik7Ci0gCi0gaW50CVJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOwotIAkvKiBuZXh0IDQg cmV0dXJuIC0xIG9uIGVycm9yICovCi1AQCAtNDM4LDggKzQ2MCwxMiBAQCB2b2lkIEVSUl9sb2Fk X1JTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYK LSAjZGVmaW5lIFJTQV9GX1JTQV9QUklWX0RFQ09ERQkJCQkgMTM3Ci0gI2RlZmluZSBSU0FfRl9S U0FfUFJJVl9FTkNPREUJCQkJIDEzOAotKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQ VAkJCSAxNDgKLSAjZGVmaW5lIFJTQV9GX1JTQV9QVUJfREVDT0RFCQkJCSAxMzkKLSsjZGVmaW5l IFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVAkJCSAxNDkKLSAjZGVmaW5lIFJTQV9GX1JTQV9TRVRV UF9CTElORElORwkJCSAxMzYKLSsjZGVmaW5lIFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QJ CQkgMTUwCi0rI2RlZmluZSBSU0FfRl9SU0FfU0VUX01FVEhPRAkJCQkgMTUxCi0gI2RlZmluZSBS U0FfRl9SU0FfU0lHTgkJCQkJIDExNwotICNkZWZpbmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RF VF9TVFJJTkcJCSAxMTgKLSAjZGVmaW5lIFJTQV9GX1JTQV9WRVJJRlkJCQkJIDExOQotQEAgLTQ3 OSwxMCArNTA1LDEyIEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmlu ZSBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwJCQkgMTIwCi0gI2RlZmluZSBSU0FfUl9MQVNUX09D VEVUX0lOVkFMSUQJCQkgMTM0Ci0gI2RlZmluZSBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkg MTA1Ci0rI2RlZmluZSBSU0FfUl9OT05fRklQU19NRVRIT0QJCQkJIDE0OQotICNkZWZpbmUgUlNB X1JfTk9fUFVCTElDX0VYUE9ORU5UCQkJIDE0MAotICNkZWZpbmUgUlNBX1JfTlVMTF9CRUZPUkVf QkxPQ0tfTUlTU0lORwkJCSAxMTMKLSAjZGVmaW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9R CQkJIDEyNwotICNkZWZpbmUgUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKLSsjZGVm aW5lIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1MAotICNkZWZp bmUgUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRQkgMTQ4Ci0g I2RlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKLSAjZGVmaW5lIFJTQV9S X1BfTk9UX1BSSU1FCQkJCSAxMjgKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRv L3JzYS9yc2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yc2EvcnNhX2xp Yi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3JzYV9saWIuYy5maXBzCTIw MDktMTItMDkgMTQ6Mzg6MjAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh NS9jcnlwdG8vcnNhL3JzYV9saWIuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEw MAotQEAgLTgwLDYgKzgwLDEzIEBAIFJTQSAqUlNBX25ldyh2b2lkKQotIAotIHZvaWQgUlNBX3Nl dF9kZWZhdWx0X21ldGhvZChjb25zdCBSU0FfTUVUSE9EICptZXRoKQotIAl7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFH X0ZJUFNfTUVUSE9EKSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVU SE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuOwotKwkJfQotKyNlbmRpZgot IAlkZWZhdWx0X1JTQV9tZXRoID0gbWV0aDsKLSAJfQotIAotQEAgLTExMSw2ICsxMTgsMTMgQEAg aW50IFJTQV9zZXRfbWV0aG9kKFJTQSAqcnNhLCBjb25zdCBSU0FfTQotIAkvKiBOQjogVGhlIGNh bGxlciBpcyBzcGVjaWZpY2FsbHkgc2V0dGluZyBhIG1ldGhvZCwgc28gaXQncyBub3QgdXAgdG8g dXMKLSAJICogdG8gZGVhbCB3aXRoIHdoaWNoIEVOR0lORSBpdCBjb21lcyBmcm9tLiAqLwotIAlj b25zdCBSU0FfTUVUSE9EICptdG1wOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNf bW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0r CQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0r CQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAJbXRtcCA9IHJzYS0+bWV0aDsKLSAJaWYgKG10 bXAtPmZpbmlzaCkgbXRtcC0+ZmluaXNoKHJzYSk7Ci0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lO RQotQEAgLTE2Myw2ICsxNzcsMTggQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2lu ZSkKLSAJCQl9Ci0gCQl9Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQ U19tb2RlKCkgJiYgIShyZXQtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQot KwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRI T0QpOwotKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSsJCWlmIChyZXQtPmVuZ2luZSkKLSsJ CQlFTkdJTkVfZmluaXNoKHJldC0+ZW5naW5lKTsKLSsjZW5kaWYKLSsJCU9QRU5TU0xfZnJlZShy ZXQpOwotKwkJcmV0dXJuIE5VTEw7Ci0rCQl9Ci0rI2VuZGlmCi0gCi0gCXJldC0+cGFkPTA7Ci0g CXJldC0+dmVyc2lvbj0wOwotQEAgLTI5NCw2ICszMjAsMTMgQEAgaW50IFJTQV9wdWJsaWNfZW5j cnlwdChpbnQgZmxlbiwgY29uc3QgdQotIGludCBSU0FfcHJpdmF0ZV9lbmNyeXB0KGludCBmbGVu LCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFyICp0bywKLSAJICAgICBS U0EgKnJzYSwgaW50IHBhZGRpbmcpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJ UFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkKLSsJ CXsKLSsJCVJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9PUEVSQVRJT05f Tk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgot IAlyZXR1cm4ocnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFk ZGluZykpOwotIAl9Ci0gCi1AQCAtMzA2LDYgKzMzOSwxMyBAQCBpbnQgUlNBX3ByaXZhdGVfZGVj cnlwdChpbnQgZmxlbiwgY29uc3QgCi0gaW50IFJTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxlbiwg Y29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCi0gCSAgICAgUlNB ICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBT X21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0rCQl7 Ci0rCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9PUEVSQVRJT05fTk9U X0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSsJCXJldHVybiAwOwotKwkJfQotKyNlbmRpZgotIAly ZXR1cm4ocnNhLT5tZXRoLT5yc2FfcHViX2RlYyhmbGVuLCBmcm9tLCB0bywgcnNhLCBwYWRkaW5n KSk7Ci0gCX0KLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3JzYS9yc2Ff c2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vcnNhL3JzYV9zaWduLmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIwMDctMDQt MjQgMDM6MDU6NDIuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vcnNhL3JzYV9zaWduLmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBA IC0xMzAsNyArMTMwLDggQEAgaW50IFJTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBj aAotIAkJaTJkX1g1MDlfU0lHKCZzaWcsJnApOwotIAkJcz10bXBzOwotIAl9Ci0tCWk9UlNBX3By aXZhdGVfZW5jcnlwdChpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCS8qIE5C OiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcg Ki8KLSsJaSA9IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jID8gcnNhLT5tZXRoLT5yc2FfcHJpdl9l bmMoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKLSAJaWYgKGkgPD0gMCkK LSAJCXJldD0wOwotIAllbHNlCi1AQCAtMTYxLDggKzE2Miw4IEBAIGludCBpbnRfcnNhX3Zlcmlm eShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKLSAKLSAJaWYoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkg JiYgcm0pCi0gCQl7Ci0tCQlpID0gUlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLAotLQkJ CQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFfUEFERElORyk7Ci0rCQlpID0gcnNhLT5tZXRoLT5y c2FfcHViX2RlYyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sCi0rCQkJCQlz aWdidWYscm0scnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7Ci0gCQlpZiAoaSA8PSAwKQotIAkJ CXJldHVybiAwOwotIAkJKnBybV9sZW4gPSBpOwotQEAgLTE3OSw3ICsxODAsOCBAQCBpbnQgaW50 X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCi0gCQkJUlNBZXJyKFJTQV9GX0lOVF9S U0FfVkVSSUZZLFJTQV9SX0lOVkFMSURfTUVTU0FHRV9MRU5HVEgpOwotIAkJCWdvdG8gZXJyOwot IAl9Ci0tCWk9UlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0Ff UEtDUzFfUEFERElORyk7Ci0rCS8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5 IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KLSsJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMg PyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtD UzFfUEFERElORykgOiAwOwotIAotIAlpZiAoaSA8PSAwKSBnb3RvIGVycjsKLSAKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NlZWQvc2VlZC5jLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhNS9jcnlwdG8vc2VlZC9zZWVkLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0 by9zZWVkL3NlZWQuYy5maXBzCTIwMDgtMTItMTYgMDg6NDE6MjEuMDAwMDAwMDAwICswMTAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2VlZC9zZWVkLmMJMjAxMC0wMi0xNiAyMzo0 Mzo0Ni4wMDAwMDAwMDAgKzAxMDAKLUBAIC0zNCw2ICszNCw5IEBACi0gCi0gI2luY2x1ZGUgPG9w ZW5zc2wvc2VlZC5oPgotICNpbmNsdWRlICJzZWVkX2xvY2wuaCIKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBjb25z dCBzZWVkX3dvcmQgU1NbNF1bMjU2XSA9IHsJewotIAkweDI5ODlhMWE4LCAweDA1ODU4MTg0LCAw eDE2YzZkMmQ0LCAweDEzYzNkM2QwLCAweDE0NDQ1MDU0LCAweDFkMGQxMTFjLCAweDJjOGNhMGFj LCAweDI1MDUyMTI0LAotQEAgLTE5Myw3ICsxOTYsMTggQEAgc3RhdGljIGNvbnN0IHNlZWRfd29y ZCBLQ1tdID0gewotIAlLQzgsCUtDOSwJS0MxMCwJS0MxMSwJS0MxMiwJS0MxMywJS0MxNCwJS0Mx NQl9OwotICNlbmRpZgotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSB2b2lkIFNFRURfc2V0X2tl eShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVEX0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9T Q0hFRFVMRSAqa3MpCi0rICAgICAgICB7Ci0rICAgICAgICBpZiAoRklQU19tb2RlKCkpCi0rICAg ICAgICAgICAgICAgIEZJUFNfQkFEX0FCT1JUKFNFRUQpCi0rICAgICAgICBwcml2YXRlX1NFRURf c2V0X2tleShyYXdrZXksIGtzKTsKLSsgICAgICAgIH0KLSsKLSt2b2lkIHByaXZhdGVfU0VFRF9z ZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURf S0VZX1NDSEVEVUxFICprcykKLSsjZWxzZQotK3ZvaWQgU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2ln bmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICprcykK LSsjZW5kaWYKLSB7Ci0gCXNlZWRfd29yZCB4MSwgeDIsIHgzLCB4NDsKLSAJc2VlZF93b3JkIHQw LCB0MTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NlZWQvc2VlZC5oLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2VlZC9zZWVkLmgKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGE1L2NyeXB0by9zZWVkL3NlZWQuaC5maXBzCTIwMTAtMDItMTYgMjI6NTg6MzAuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2VlZC9zZWVkLmgJ MjAxMC0wMi0xNiAyMzozNTo1Ny4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMTcsNiArMTE3LDkgQEAg dHlwZWRlZiBzdHJ1Y3Qgc2VlZF9rZXlfc3QgewotIH0gU0VFRF9LRVlfU0NIRURVTEU7Ci0gCi0g Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3ZvaWQgcHJpdmF0ZV9TRUVEX3NldF9rZXkoY29uc3Qg dW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9LRVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUg KmtzKTsKLSsjZW5kaWYKLSB2b2lkIFNFRURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJh d2tleVtTRUVEX0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpOwotIAotIHZvaWQg U0VFRF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgc1tTRUVEX0JMT0NLX1NJWkVdLCB1bnNp Z25lZCBjaGFyIGRbU0VFRF9CTE9DS19TSVpFXSwgY29uc3QgU0VFRF9LRVlfU0NIRURVTEUgKmtz KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9zaGFfZGdzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6 MTQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2hhL3No YV9kZ3N0LmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAKLUBAIC01Nyw2ICs1 NywxMiBAQAotICAqLwotIAotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K LSAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEwKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NI QSkKLSAKLSAjdW5kZWYgIFNIQV8xCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0 by9zaGEvc2hhLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhLmgKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhLmguZmlwcwkyMDEwLTAyLTE2IDIy OjU4OjMwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3No YS9zaGEuaAkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTEwNiw2ICsx MDYsOSBAQCB0eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9zdAotIAl9IFNIQV9DVFg7Ci0gCi0gI2lm bmRlZiBPUEVOU1NMX05PX1NIQTAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVf U0hBX0luaXQoU0hBX0NUWCAqYyk7Ci0rI2VuZGlmCi0gaW50IFNIQV9Jbml0KFNIQV9DVFggKmMp OwotIGludCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBs ZW4pOwotIGludCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMJMjAxMC0wMi0xNiAyMjo1ODozMC4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhX2xvY2wu aAkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTEyMiw4ICsxMjIsMTUg QEAgdm9pZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsIAotICNkZWZpbmUgSU5J VF9EQVRBX2gzIDB4MTAzMjU0NzZVTAotICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBV TAotIAotKyNpZiBkZWZpbmVkKFNIQV8wKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKLStGSVBT X05PTl9GSVBTX01EX0luaXQoU0hBKQotKyNlbHNlCi0gaW50IEhBU0hfSU5JVCAoU0hBX0NUWCAq YykKLSsjZW5kaWYKLSAJewotKyNpZiBkZWZpbmVkKFNIQV8xKSAmJiBkZWZpbmVkKE9QRU5TU0xf RklQUykKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMsMCxz aXplb2YoKmMpKTsKLSAJYy0+aDA9SU5JVF9EQVRBX2gwOwotIAljLT5oMT1JTklUX0RBVEFfaDE7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by9zaGEvc2hhMWRnc3QuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9zaGExZGdzdC5jCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9zaGEx ZGdzdC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtNjMsNiArNjMs MTAgQEAKLSAjZGVmaW5lIFNIQV8xCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotKwotIAotIGNvbnN0IGNoYXIgU0hBMV92ZXJzaW9uW109IlNIQTEiIE9QRU5TU0xfVkVSU0lP Tl9QVEVYVDsKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9zaGEy NTYuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9zaGEyNTYuYwotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMDctMDEtMjEgMTQ6 MDc6MTQuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2hh L3NoYTI1Ni5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTIsMTIg KzEyLDE5IEBACi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0gI2luY2x1ZGUgPG9w ZW5zc2wvc2hhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjZW5kaWYKLSsKLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotIAotIGNv bnN0IGNoYXIgU0hBMjU2X3ZlcnNpb25bXT0iU0hBLTI1NiIgT1BFTlNTTF9WRVJTSU9OX1BURVhU OwotIAotIGludCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAqYykKLSAJewotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAltZW1zZXQgKGMs MCxzaXplb2YoKmMpKTsKLSAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdjZDUw N1VMOwotIAljLT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5VUw7Ci1AQCAt MjksNiArMzYsOSBAQCBpbnQgU0hBMjI0X0luaXQgKFNIQTI1Nl9DVFggKmMpCi0gCi0gaW50IFNI QTI1Nl9Jbml0IChTSEEyNTZfQ1RYICpjKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCW1lbXNldCAoYywwLHNpemVvZigqYykp OwotIAljLT5oWzBdPTB4NmEwOWU2NjdVTDsJYy0+aFsxXT0weGJiNjdhZTg1VUw7Ci0gCWMtPmhb Ml09MHgzYzZlZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUv Y3J5cHRvL3NoYS9zaGE1MTIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3NoYS9z aGE1MTIuYy5maXBzCTIwMDktMTItMzAgMTI6NTM6MzMuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhNS9jcnlwdG8vc2hhL3NoYTUxMi5jCTIwMTAtMDItMTYgMjI6NTg6MzEu MDAwMDAwMDAwICswMTAwCi1AQCAtNSw2ICs1LDEwIEBACi0gICogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgKi8K LSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2lmICFkZWZpbmVkKE9Q RU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikKLSAvKgotICAqIElN UExFTUVOVEFUSU9OIE5PVEVTLgotQEAgLTYxLDYgKzY1LDkgQEAgY29uc3QgY2hhciBTSEE1MTJf dmVyc2lvbltdPSJTSEEtNTEyIiBPUAotIAotIGludCBTSEEzODRfSW5pdCAoU0hBNTEyX0NUWCAq YykKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwot KyNlbmRpZgotICNpZiBkZWZpbmVkKFNIQTUxMl9BU00pICYmIChkZWZpbmVkKF9fYXJtX18pIHx8 IGRlZmluZWQoX19hcm0pKQotIAkvKiBtYWludGFpbiBkd29yZCBvcmRlciByZXF1aXJlZCBieSBh c3NlbWJsZXIgbW9kdWxlICovCi0gCXVuc2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKilj LT5oOwotQEAgLTkwLDYgKzk3LDkgQEAgaW50IFNIQTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQot IAotIGludCBTSEE1MTJfSW5pdCAoU0hBNTEyX0NUWCAqYykKLSAJewotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotICNpZiBkZWZpbmVkKFNI QTUxMl9BU00pICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pKQotIAkvKiBt YWludGFpbiBkd29yZCBvcmRlciByZXF1aXJlZCBieSBhc3NlbWJsZXIgbW9kdWxlICovCi0gCXVu c2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNS9jcnlwdG8vd2hybHBvb2wvd2hybHBvb2wuaC5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTUvY3J5cHRvL3docmxwb29sL3docmxwb29sLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1 L2NyeXB0by93aHJscG9vbC93aHJscG9vbC5oLmZpcHMJMjAxMC0wMi0xNiAyMzo0MTowNS4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L2NyeXB0by93aHJscG9vbC93aHJs cG9vbC5oCTIwMTAtMDItMTYgMjM6NDA6MzkuMDAwMDAwMDAwICswMTAwCi1AQCAtMjQsNiArMjQs OSBAQCB0eXBlZGVmIHN0cnVjdAl7Ci0gCX0gV0hJUkxQT09MX0NUWDsKLSAKLSAjaWZuZGVmIE9Q RU5TU0xfTk9fV0hJUkxQT09MCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRlX1dI SVJMUE9PTF9Jbml0KFdISVJMUE9PTF9DVFggKmMpOwotKyNlbmRpZgotIGludCBXSElSTFBPT0xf SW5pdAkoV0hJUkxQT09MX0NUWCAqYyk7Ci0gaW50IFdISVJMUE9PTF9VcGRhdGUJKFdISVJMUE9P TF9DVFggKmMsY29uc3Qgdm9pZCAqaW5wLHNpemVfdCBieXRlcyk7Ci0gdm9pZCBXSElSTFBPT0xf Qml0VXBkYXRlKFdISVJMUE9PTF9DVFggKmMsY29uc3Qgdm9pZCAqaW5wLHNpemVfdCBiaXRzKTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBzCTIwMDgtMTIt MjkgMTM6MzU6NDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9jcnlw dG8vd2hybHBvb2wvd3BfZGdzdC5jCTIwMTAtMDItMTYgMjM6NDI6NDkuMDAwMDAwMDAwICswMTAw Ci1AQCAtNTMsOCArNTMsMTIgQEAKLSAKLSAjaW5jbHVkZSAid3BfbG9jbC5oIgotICNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotLWludCBXSElSTFBP T0xfSW5pdAkoV0hJUkxQT09MX0NUWCAqYykKLStGSVBTX05PTl9GSVBTX01EX0luaXQoV0hJUkxQ T09MKQotIAl7Ci0gCW1lbXNldCAoYywwLHNpemVvZigqYykpOwotIAlyZXR1cm4oMSk7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L01ha2VmaWxlLm9yZy5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTUvTWFrZWZpbGUub3JnCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9NYWtlZmlsZS5vcmcu ZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvTWFrZWZpbGUub3JnCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAw Ci1AQCAtMTEwLDYgKzExMCw5IEBAIExJQktSQjU9Ci0gWkxJQl9JTkNMVURFPQotIExJQlpMSUI9 Ci0gCi0rIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVkCi0rRklQUz0KLSsKLSBESVJTPSAgIGNy eXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMKLSBFTkdESVJTPSBjY2dvc3QKLSBTSExJ QkRJUlM9IGNyeXB0byBzc2wKLUBAIC0xMjIsNyArMTI1LDcgQEAgU0RJUlM9ICBcCi0gCWJuIGVj IHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5lIFwKLSAJYnVmZmVyIGJpbyBzdGFjayBs aGFzaCByYW5kIGVyciBcCi0gCWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBw a2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAotLQljbXMgcHF1ZXVlIHRzIGpwYWtlIHN0 b3JlCi0rCWNtcyBwcXVldWUgdHMganBha2Ugc3RvcmUgZmlwcwotICMga2VlcCBpbiBtaW5kIHRo YXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUKLSAjIGFjY29yZGlu ZyB0byBuby14eHggYXJndW1lbnRzLi4uCi0gCi1AQCAtMjA2LDYgKzIwOSw3IEBAIEJVSUxERU5W PQlQTEFURk9STT0nJChQTEFURk9STSknIFBST0NFU1MKLSAJCVJNRDE2MF9BU01fT0JKPSckKFJN RDE2MF9BU01fT0JKKScJCVwKLSAJCVdQX0FTTV9PQko9JyQoV1BfQVNNX09CSiknCQkJXAotIAkJ UEVSTEFTTV9TQ0hFTUU9JyQoUEVSTEFTTV9TQ0hFTUUpJwkJXAotKwkJRklQUz0iJCR7RklQUzot JChGSVBTKX0iCVwKLSAJCVRISVM9JCR7VEhJUzotJEB9IE1BS0VGSUxFPU1ha2VmaWxlIE1BS0VP VkVSUklERVM9Ci0gIyBNQUtFT1ZFUlJJREVTPSBlZmZlY3RpdmVseSAiZXF1YWxpemVzIiBHTlUt aXNoIGFuZCBTeXNWLWlzaCBtYWtlIGZsYXZvcnMsCi0gIyB3aGljaCBpbiB0dXJuIGVsaW1pbmF0 ZXMgYW1iaWd1aXRpZXMgaW4gdmFyaWFibGUgdHJlYXRtZW50IHdpdGggLWUuCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zc2xfY2lwaC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NS9zc2wvc3NsX2NpcGguYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3NzbF9jaXBoLmMu ZmlwcwkyMDA5LTA5LTEzIDAxOjE4OjA5LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTUvc3NsL3NzbF9jaXBoLmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAx MDAKLUBAIC03MjcsNiArNzI3LDkgQEAgc3RhdGljIHZvaWQgc3NsX2NpcGhlcl9jb2xsZWN0X2Np cGhlcnMoYwotIAkJICAgICEoYy0+YWxnb3JpdGhtX2F1dGggJiBkaXNhYmxlZF9hdXRoKSAmJgot IAkJICAgICEoYy0+YWxnb3JpdGhtX2VuYyAmIGRpc2FibGVkX2VuYykgJiYKLSAJCSAgICAhKGMt PmFsZ29yaXRobV9tYWMgJiBkaXNhYmxlZF9tYWMpICYmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwkJCSghRklQU19tb2RlKCkgfHwgKGMtPmFsZ29fc3RyZW5ndGggJiBTU0xfRklQUykpICYmCi0r I2VuZGlmCi0gCQkgICAgIShjLT5hbGdvcml0aG1fc3NsICYgZGlzYWJsZWRfc3NsKSkKLSAJCQl7 Ci0gCQkJY29fbGlzdFtjb19saXN0X251bV0uY2lwaGVyID0gYzsKLUBAIC0xNDIzLDcgKzE0MjYs MTEgQEAgU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnNzbF9jcmVhdGVfY2lwaGVyXwotIAkgKi8KLSAJ Zm9yIChjdXJyID0gaGVhZDsgY3VyciAhPSBOVUxMOyBjdXJyID0gY3Vyci0+bmV4dCkKLSAJCXsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoY3Vyci0+YWN0aXZlICYmICghRklQU19tb2Rl KCkgfHwgY3Vyci0+Y2lwaGVyLT5hbGdvX3N0cmVuZ3RoICYgU1NMX0ZJUFMpKQotKyNlbHNlCi0g CQlpZiAoY3Vyci0+YWN0aXZlKQotKyNlbmRpZgotIAkJCXsKLSAJCQlza19TU0xfQ0lQSEVSX3B1 c2goY2lwaGVyc3RhY2ssIGN1cnItPmNpcGhlcik7Ci0gI2lmZGVmIENJUEhFUl9ERUJVRwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvc3NsX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAu MC1iZXRhNS9zc2wvc3NsX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvc3NsX2xp Yi5jLmZpcHMJMjAxMC0wMS0wNyAyMDowNTowMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE1L3NzbC9zc2xfbGliLmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAg KzAxMDAKLUBAIC0xNTIxLDYgKzE1MjEsMTQgQEAgU1NMX0NUWCAqU1NMX0NUWF9uZXcoY29uc3Qg U1NMX01FVEhPRCAqbQotIAkJcmV0dXJuKE5VTEwpOwotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NM X0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChtZXRoLT52ZXJzaW9uIDwgVExTMV9WRVJTSU9O KSkJCi0rCQl7Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsIFNTTF9SX09OTFlfVExTX0FM TE9XRURfSU5fRklQU19NT0RFKTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgotKwot IAlpZiAoU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeCgpIDwgMCkKLSAJCXsKLSAJ CVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVyxTU0xfUl9YNTA5X1ZFUklGSUNBVElPTl9TRVRVUF9Q Uk9CTEVNUyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zc2x0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zc2x0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGE1L3NzbC9zc2x0ZXN0LmMuZmlwcwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAwMDAwMDAwMCArMDEw MAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3NzbHRlc3QuYwkyMDEwLTAyLTE2IDIyOjU4 OjMxLjAwMDAwMDAwMCArMDEwMAotQEAgLTI2Niw2ICsyNjYsOSBAQCBzdGF0aWMgdm9pZCBzdl91 c2FnZSh2b2lkKQotIAl7Ci0gCWZwcmludGYoc3RkZXJyLCJ1c2FnZTogc3NsdGVzdCBbYXJncyAu Li5dXG4iKTsKLSAJZnByaW50ZihzdGRlcnIsIlxuIik7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KwlmcHJpbnRmKHN0ZGVyciwiLUYgICAgICAgICAgICAgLSBydW4gdGVzdCBpbiBGSVBTIG1vZGVc biIpOwotKyNlbmRpZgotIAlmcHJpbnRmKHN0ZGVyciwiIC1zZXJ2ZXJfYXV0aCAgLSBjaGVjayBz ZXJ2ZXIgY2VydGlmaWNhdGVcbiIpOwotIAlmcHJpbnRmKHN0ZGVyciwiIC1jbGllbnRfYXV0aCAg LSBkbyBjbGllbnQgYXV0aGVudGljYXRpb25cbiIpOwotIAlmcHJpbnRmKHN0ZGVyciwiIC1wcm94 eSAgICAgICAgLSBhbGxvdyBwcm94eSBjZXJ0aWZpY2F0ZXNcbiIpOwotQEAgLTQ4NSw2ICs0ODgs OSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotICNlbmRpZgotIAlTVEFDS19P RihTU0xfQ09NUCkgKnNzbF9jb21wX21ldGhvZHMgPSBOVUxMOwotIAlpbnQgdGVzdF9jaXBoZXJs aXN0ID0gMDsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWludCBmaXBzX21vZGU9MDsKLSsjZW5k aWYKLSAKLSAJdmVyYm9zZSA9IDA7Ci0gCWRlYnVnID0gMDsKLUBAIC01MTYsNyArNTIyLDE2IEBA IGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0gCi0gCXdoaWxlIChhcmdjID49IDEp Ci0gCQl7Ci0tCQlpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQotKwkJaWYo IXN0cmNtcCgqYXJndiwiLUYiKSkKLSsJCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCWZp cHNfbW9kZT0xOwotKyNlbHNlCi0rCQkJZnByaW50ZihzdGRlcnIsIm5vdCBjb21waWxlZCB3aXRo IEZJUFMgc3VwcG9ydCwgc28gZXhpdHRpbmcgd2l0aG91dCBydW5uaW5nLlxuIik7Ci0rCQkJRVhJ VCgwKTsKLSsjZW5kaWYKLSsJCQl9Ci0rCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1zZXJ2ZXJf YXV0aCIpID09IDApCi0gCQkJc2VydmVyX2F1dGg9MTsKLSAJCWVsc2UgaWYJKHN0cmNtcCgqYXJn diwiLWNsaWVudF9hdXRoIikgPT0gMCkKLSAJCQljbGllbnRfYXV0aD0xOwotQEAgLTcxMiw2ICs3 MjcsMjAgQEAgYmFkOgotIAkJRVhJVCgxKTsKLSAJCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCWlmKGZpcHNfbW9kZSkKLSsJCXsKLSsJCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJCXsK LSsJCQlFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOwotKwkJCUVSUl9wcmludF9lcnJvcnMoQklP X25ld19mcChzdGRlcnIsQklPX05PQ0xPU0UpKTsKLSsJCQlFWElUKDEpOwotKwkJCX0KLSsJCWVs c2UKLSsJCQlmcHJpbnRmKHN0ZGVyciwiKioqIElOIEZJUFMgTU9ERSAqKipcbiIpOwotKwkJfQot KyNlbmRpZgotKwotIAlpZiAocHJpbnRfdGltZSkKLSAJCXsKLSAJCWlmICghYmlvX3BhaXIpCi1A QCAtMjE1NCwxMiArMjE4MywxMiBAQCBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGFwcF92ZXJpZnlf Y2FsbGJhCi0gCQl9Ci0gCi0gI2lmbmRlZiBPUEVOU1NMX05PX1g1MDlfVkVSSUZZCi0tIyBpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjIGlmIDAKLSAJaWYocy0+dmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04p Ci0gCQlGSVBTX2FsbG93X21kNSgxKTsKLSAjIGVuZGlmCi0gCW9rID0gWDUwOV92ZXJpZnlfY2Vy dChjdHgpOwotLSMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpZiAwCi0gCWlmKHMtPnZlcnNpb24g PT0gVExTMV9WRVJTSU9OKQotIAkJRklQU19hbGxvd19tZDUoMCk7Ci0gIyBlbmRpZgotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczIzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTUvc3NsL3MyM19jbG50LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zMjNfY2xu dC5jLmZpcHMJMjAwOS0xMS0xOCAxNTo0NTozMi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE1L3NzbC9zMjNfY2xudC5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAw ICswMTAwCi1AQCAtMzM3LDYgKzMzNywxNCBAQCBzdGF0aWMgaW50IHNzbDIzX2NsaWVudF9oZWxs byhTU0wgKnMpCi0gCQkJdmVyc2lvbl9tYWpvciA9IFRMUzFfVkVSU0lPTl9NQUpPUjsKLSAJCQl2 ZXJzaW9uX21pbm9yID0gVExTMV9WRVJTSU9OX01JTk9SOwotIAkJCX0KLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCQllbHNlIGlmKEZJUFNfbW9kZSgpKQotKwkJCXsKLSsJCQlTU0xlcnIoU1NMX0Zf U1NMMjNfQ0xJRU5UX0hFTExPLAotKwkJCQkJU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBT X01PREUpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0rI2VuZGlmCi0gCQllbHNlIGlmICh2ZXJz aW9uID09IFNTTDNfVkVSU0lPTikKLSAJCQl7Ci0gCQkJdmVyc2lvbl9tYWpvciA9IFNTTDNfVkVS U0lPTl9NQUpPUjsKLUBAIC02MjAsNiArNjI4LDE0IEBAIHN0YXRpYyBpbnQgc3NsMjNfZ2V0X3Nl cnZlcl9oZWxsbyhTU0wgKnMKLSAJCWlmICgocFsyXSA9PSBTU0wzX1ZFUlNJT05fTUlOT1IpICYm Ci0gCQkJIShzLT5vcHRpb25zICYgU1NMX09QX05PX1NTTHYzKSkKLSAJCQl7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKwkJCWlmKEZJUFNfbW9kZSgpKQotKwkJCQl7Ci0rCQkJCVNTTGVycihTU0xf Rl9TU0wyM19HRVRfU0VSVkVSX0hFTExPLAotKwkJCQkJU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9J Tl9GSVBTX01PREUpOwotKwkJCQlnb3RvIGVycjsKLSsJCQkJfQotKyNlbmRpZgotIAkJCXMtPnZl cnNpb249U1NMM19WRVJTSU9OOwotIAkJCXMtPm1ldGhvZD1TU0x2M19jbGllbnRfbWV0aG9kKCk7 Ci0gCQkJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczIzX3NydnIuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3MyM19zcnZyLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGE1L3NzbC9zMjNfc3J2ci5jLmZpcHMJMjAxMC0wMS0xMyAyMDowODoyOS4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zMjNfc3J2ci5jCTIwMTAtMDItMTYgMjI6 NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMzkzLDYgKzM5MywxNSBAQCBpbnQgc3NsMjNfZ2V0 X2NsaWVudF9oZWxsbyhTU0wgKnMpCi0gCQkJfQotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChzLT52ZXJzaW9uIDwgVExTMV9WRVJTSU9OKSkKLSsJ CXsKLSsJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfQ0xJRU5UX0hFTExPLAotKwkJCQkJU1NMX1Jf T05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2Vu ZGlmCi0rCi0gCWlmIChzLT5zdGF0ZSA9PSBTU0wyM19TVF9TUl9DTE5UX0hFTExPX0IpCi0gCQl7 Ci0gCQkvKiB3ZSBoYXZlIFNTTHYzL1RMU3YxIGluIGFuIFNTTHYyIGhlYWRlcgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczNfY2xudC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NS9zc2wvczNfY2xudC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczNfY2xudC5jLmZp cHMJMjAxMC0wMS0wNSAxNzo0NjozOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE1L3NzbC9zM19jbG50LmMJMjAxMC0wMi0xNiAyMjo1ODozMS4wMDAwMDAwMDAgKzAxMDAK LUBAIC0xNTYsNiArMTU2LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPgotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0g I2lmbmRlZiBPUEVOU1NMX05PX0RICi0gI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSAjZW5kaWYK LUBAIC0xNTQ4LDYgKzE1NTIsOCBAQCBpbnQgc3NsM19nZXRfa2V5X2V4Y2hhbmdlKFNTTCAqcykK LSAJCQlxPW1kX2J1ZjsKLSAJCQlmb3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkKLSAJCQkJewot KwkJCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRfY3R4LAotKwkJCQkJRVZQX01EX0NUWF9GTEFH X05PTl9GSVBTX0FMTE9XKTsKLSAJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwobnVtID09 IDIpCi0gCQkJCQk/cy0+Y3R4LT5tZDU6cy0+Y3R4LT5zaGExLCBOVUxMKTsKLSAJCQkJRVZQX0Rp Z2VzdFVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFORE9N X1NJWkUpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNS9zc2wvczNfZW5jLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zM19lbmMuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv c3NsL3MzX2VuYy5jLmZpcHMJMjAwOS0wNC0xNiAxOToyMjo1MC4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zM19lbmMuYwkyMDEwLTAyLTE2IDIyOjU4OjMxLjAw MDAwMDAwMCArMDEwMAotQEAgLTE3MCw2ICsxNzAsNyBAQCBzdGF0aWMgaW50IHNzbDNfZ2VuZXJh dGVfa2V5X2Jsb2NrKFNTTCAqCi0gI2VuZGlmCi0gCWs9MDsKLSAJRVZQX01EX0NUWF9pbml0KCZt NSk7Ci0rCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtNSwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBT X0FMTE9XKTsKLSAJRVZQX01EX0NUWF9pbml0KCZzMSk7Ci0gCWZvciAoaT0wOyAoaW50KWk8bnVt OyBpKz1NRDVfRElHRVNUX0xFTkdUSCkKLSAJCXsKLUBAIC02MTQsNiArNjE1LDggQEAgaW50IHNz bDNfZGlnZXN0X2NhY2hlZF9yZWNvcmRzKFNTTCAqcykKLSAJCWlmICgobWFzayAmIHMtPnMzLT50 bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMikgJiYgbWQpIAotIAkJCXsKLSAJCQlzLT5zMy0+aGFu ZHNoYWtlX2Rnc3RbaV09RVZQX01EX0NUWF9jcmVhdGUoKTsKLSsJCQlFVlBfTURfQ1RYX3NldF9m bGFncyhzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sCi0rCQkJCUVWUF9NRF9DVFhfRkxBR19OT05f RklQU19BTExPVyk7Ci0gCQkJRVZQX0RpZ2VzdEluaXRfZXgocy0+czMtPmhhbmRzaGFrZV9kZ3N0 W2ldLG1kLE5VTEwpOwotIAkJCUVWUF9EaWdlc3RVcGRhdGUocy0+czMtPmhhbmRzaGFrZV9kZ3N0 W2ldLGhkYXRhLGhkYXRhbGVuKTsKLSAJCQl9IAotQEAgLTY3MCw2ICs2NzMsNyBAQCBzdGF0aWMg aW50IHNzbDNfaGFuZHNoYWtlX21hYyhTU0wgKnMsIGluCi0gCQlyZXR1cm4gMDsKLSAJfQkKLSAJ RVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwlFVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBf TURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAlFVlBfTURfQ1RYX2NvcHlfZXgoJmN0eCxk KTsKLSAJbj1FVlBfTURfQ1RYX3NpemUoJmN0eCk7Ci0gCWlmIChuIDwgMCkKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3MzX3NydnIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUv c3NsL3MzX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3MzX3NydnIuYy5maXBz CTIwMTAtMDEtMDEgMTU6Mzk6NTEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhNS9zc2wvczNfc3J2ci5jCTIwMTAtMDItMTYgMjI6NTg6MzEuMDAwMDAwMDAwICswMTAwCi1A QCAtMTczMiw2ICsxNzMyLDggQEAgaW50IHNzbDNfc2VuZF9zZXJ2ZXJfa2V5X2V4Y2hhbmdlKFNT TCAqcwotIAkJCQlqPTA7Ci0gCQkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQotIAkJCQkJ ewotKwkJCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0eCwKLSsJCQkJCQlFVlBfTURfQ1RY X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAkJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwo bnVtID09IDIpCi0gCQkJCQkJP3MtPmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7Ci0gCQkJ CQlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NM M19SQU5ET01fU0laRSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC90MV9lbmMu Yy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3QxX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNS9zc2wvdDFfZW5jLmMuZmlwcwkyMDA5LTA0LTE5IDIwOjAzOjEzLjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvc3NsL3QxX2VuYy5jCTIwMTAtMDItMTYgMjI6 NTg6MzEuMDAwMDAwMDAwICswMTAwCi1AQCAtMTY5LDYgKzE2OSw4IEBAIHN0YXRpYyB2b2lkIHRs czFfUF9oYXNoKGNvbnN0IEVWUF9NRCAqbWQKLSAKLSAJSE1BQ19DVFhfaW5pdCgmY3R4KTsKLSAJ SE1BQ19DVFhfaW5pdCgmY3R4X3RtcCk7Ci0rCUhNQUNfQ1RYX3NldF9mbGFncygmY3R4LCBFVlBf TURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotKwlITUFDX0NUWF9zZXRfZmxhZ3MoJmN0eF90 bXAsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCUhNQUNfSW5pdF9leCgmY3R4 LHNlYyxzZWNfbGVuLG1kLCBOVUxMKTsKLSAJSE1BQ19Jbml0X2V4KCZjdHhfdG1wLHNlYyxzZWNf bGVuLG1kLCBOVUxMKTsKLSAJaWYgKHNlZWQxICE9IE5VTEwpIEhNQUNfVXBkYXRlKCZjdHgsc2Vl ZDEsc2VlZDFfbGVuKTsKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE1LXZlcnNpb24u cGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE1LXZlcnNpb24ucGF0Y2gKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGNmM2JjZjYuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRh NS12ZXJzaW9uLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotV2UgaGF2ZSB0 byBrZWVwIHRoZSBiZXRhIHN0YXR1cyBvbiAzIGFzIHNvbWUgYXBwbGljYXRpb25zIChPcGVuU1NI KSBpbmNvcnJlY3RseSBpbnNpc3QKLW9uIGhhdmluZyB0aGUgc2FtZSBiZXRhIHN0YXR1cyBvZiBP cGVuU1NMIGxpYnJhcnkgYXMgdGhleSB3ZXJlIGJ1aWx0IGFnYWluc3QuCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE1L2NyeXB0by9vcGVuc3Nsdi5oLnZlcnNpb24gb3BlbnNzbC0xLjAuMC1i ZXRhNS9jcnlwdG8vb3BlbnNzbHYuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL29w ZW5zc2x2LmgudmVyc2lvbgkyMDEwLTAxLTIwIDE4OjE2OjQzLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTUvY3J5cHRvL29wZW5zc2x2LmgJMjAxMC0wMS0yMCAyMDoyMDoy My4wMDAwMDAwMDAgKzAxMDAKLUBAIC0yNSw3ICsyNSw3IEBACi0gICogKFByaW9yIHRvIDAuOS41 YSBiZXRhMSwgYSBkaWZmZXJlbnQgc2NoZW1lIHdhcyB1c2VkOiBNTU5ORkZSQkIgZm9yCi0gICog IG1ham9yIG1pbm9yIGZpeCBmaW5hbCBwYXRjaC9iZXRhKQotICAqLwotLSNkZWZpbmUgT1BFTlNT TF9WRVJTSU9OX05VTUJFUgkweDEwMDAwMDA1TAotKyNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05V TUJFUgkweDEwMDAwMDAzTAotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSAjZGVmaW5lIE9QRU5TU0xf VkVSU0lPTl9URVhUCSJPcGVuU1NMIDEuMC4wLWZpcHMtYmV0YTUgMjAgSmFuIDIwMTAiCi0gI2Vs c2UKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWZpcHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4w LWZpcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViNmRlNwot LS0gL2Rldi9udWxsCisrKyBiL29wZW5zc2wtMS4wLjAtZmlwcy5wYXRjaApAQCAtMCwwICsxLDEy MTY0IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL0NvbmZpZ3VyZS5maXBzIG9wZW5zc2wtMS4w LjAvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMC9Db25maWd1cmUuZmlwcwkyMDEwLTAzLTMw IDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvQ29uZmlndXJlCTIw MTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNjYwLDYgKzY2MCw3IEBAIG15 ICRjbWxsX2VuYz0iY2FtZWxsaWEubyBjbWxsX21pc2MubyBjbWwKKyBteSAkcHJvY2Vzc29yPSIi OworIG15ICRkZWZhdWx0X3JhbmxpYjsKKyBteSAkcGVybDsKKytteSAkZmlwcz0wOworIAorIAor ICMgQWxsIG9mIHRoZSBmb2xsb3dpbmcgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCAoUkM1IHdhcyBl bmFibGVkIGJlZm9yZSAwLjkuOCk6CitAQCAtODA2LDYgKzgwNywxMCBAQCBQUk9DRVNTX0FSR1M6 CisgCQkJfQorIAkJZWxzaWYgKC9eMzg2JC8pCisgCQkJeyAkcHJvY2Vzc29yPTM4NjsgfQorKwkJ ZWxzaWYgKC9eZmlwcyQvKQorKwkJCXsKKysJCQkkZmlwcz0xOworKwkJICAgICAgICB9CisgCQll bHNpZiAoL15yc2FyZWYkLykKKyAJCQl7CisgCQkJIyBObyBSU0FyZWYgc3VwcG9ydCBhbnkgbW9y ZSBzaW5jZSBpdCdzIG5vdCBuZWVkZWQuCitAQCAtMTM2OCw2ICsxMzczLDExIEBAICRjZmxhZ3Mu PSIgLURPUEVOU1NMX0lBMzJfU1NFMiIgaWYgKCEkbm8KKyAKKyAkY2ZsYWdzLj0iIC1ET1BFTlNT TF9CTl9BU01fTU9OVCIgaWYgKCRibl9vYmogPX4gLy1tb250Lyk7CisgCisraWYgKCRmaXBzKQor Kwl7CisrCSRvcGVuc3NsX290aGVyX2RlZmluZXMuPSIjZGVmaW5lIE9QRU5TU0xfRklQU1xuIjsK KysJfQorKworICRjcHVpZF9vYmo9Im1lbV9jbHIubyIJdW5sZXNzICgkY3B1aWRfb2JqID1+IC9c Lm8kLyk7CisgJGRlc19vYmo9JGRlc19lbmMJdW5sZXNzICgkZGVzX29iaiA9fiAvXC5vJC8pOwor ICRiZl9vYmo9JGJmX2VuYwkJdW5sZXNzICgkYmZfb2JqID1+IC9cLm8kLyk7CitAQCAtMTUzNSw2 ICsxNTQ1LDEwIEBAIHdoaWxlICg8SU4+KQorIAlzL15MSUJLUkI1PS4qL0xJQktSQjU9JHdpdGhh cmdzeyJrcmI1LWxpYiJ9LzsKKyAJcy9eTElCWkxJQj0uKi9MSUJaTElCPSR3aXRoYXJnc3siemxp Yi1saWIifS87CisgCXMvXlpMSUJfSU5DTFVERT0uKi9aTElCX0lOQ0xVREU9JHdpdGhhcmdzeyJ6 bGliLWluY2x1ZGUifS87CisrCWlmICgkZmlwcykKKysJCXsKKysJCXMvXkZJUFM9LiovRklQUz15 ZXMvOworKwkJfQorIAlzL15TSExJQl9UQVJHRVQ9LiovU0hMSUJfVEFSR0VUPSRzaGFyZWRfdGFy Z2V0LzsKKyAJcy9eU0hMSUJfTUFSSz0uKi9TSExJQl9NQVJLPSRzaGFyZWRfbWFyay87CisgCXMv XlNIQVJFRF9MSUJTPS4qL1NIQVJFRF9MSUJTPVwkKFNIQVJFRF9DUllQVE8pIFwkKFNIQVJFRF9T U0wpLyBpZiAoISRub19zaGFyZWQpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYmYv YmZfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYmYvYmZfc2tleS5jCistLS0gb3Bl bnNzbC0xLjAuMC9jcnlwdG8vYmYvYmZfc2tleS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo1Mi4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9iZi9iZl9za2V5LmMJMjAx MC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OSwxMCArNTksMTUgQEAKKyAj aW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvYmxvd2Zpc2guaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpbmNs dWRlICJiZl9sb2NsLmgiCisgI2luY2x1ZGUgImJmX3BpLmgiCisgCistdm9pZCBCRl9zZXRfa2V5 KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorK0ZJUFNf Tk9OX0ZJUFNfVkNJUEhFUl9Jbml0KEJGKQorIAl7CisgCWludCBpOworIAlCRl9MT05HICpwLHJp LGluWzJdOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYmYvYmxvd2Zpc2guaC5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JmL2Jsb3dmaXNoLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2Ny eXB0by9iZi9ibG93ZmlzaC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9iZi9ibG93ZmlzaC5oCTIwMTAtMDMtMzAgMTA6 MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTA0LDcgKzEwNCw5IEBAIHR5cGVkZWYgc3RydWN0 IGJmX2tleV9zdAorIAlCRl9MT05HIFNbNCoyNTZdOworIAl9IEJGX0tFWTsKKyAKKy0gCisrI2lm ZGVmIE9QRU5TU0xfRklQUyAKKyt2b2lkIHByaXZhdGVfQkZfc2V0X2tleShCRl9LRVkgKmtleSwg aW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisrI2VuZGlmCisgdm9pZCBCRl9z ZXRfa2V5KEJGX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsK KyAKKyB2b2lkIEJGX2VuY3J5cHQoQkZfTE9ORyAqZGF0YSxjb25zdCBCRl9LRVkgKmtleSk7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ibi9ibi5oLmZpcHMgb3BlbnNzbC0xLjAuMC9j cnlwdG8vYm4vYm4uaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL2JuLmguZmlwcwkyMDEw LTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2JuL2JuLmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NDAsNiAr NTQwLDE3IEBAIGludAlCTl9pc19wcmltZV9leChjb25zdCBCSUdOVU0gKnAsaW50IG4KKyBpbnQJ Qk5faXNfcHJpbWVfZmFzdHRlc3RfZXgoY29uc3QgQklHTlVNICpwLGludCBuY2hlY2tzLCBCTl9D VFggKmN0eCwKKyAJCWludCBkb190cmlhbF9kaXZpc2lvbiwgQk5fR0VOQ0IgKmNiKTsKKyAKKytp bnQgQk5fWDkzMV9nZW5lcmF0ZV9YcHEoQklHTlVNICpYcCwgQklHTlVNICpYcSwgaW50IG5iaXRz LCBCTl9DVFggKmN0eCk7CisrCisraW50IEJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KEJJR05VTSAq cCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKKysJCQljb25zdCBCSUdOVU0gKlhwLCBjb25zdCBC SUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9D VFggKmN0eCwgQk5fR0VOQ0IgKmNiKTsKKytpbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChC SUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJQklHTlVNICpYcDEsIEJJR05V TSAqWHAyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9D VFggKmN0eCwKKysJCQlCTl9HRU5DQiAqY2IpOworKworIEJOX01PTlRfQ1RYICpCTl9NT05UX0NU WF9uZXcodm9pZCApOworIHZvaWQgQk5fTU9OVF9DVFhfaW5pdChCTl9NT05UX0NUWCAqY3R4KTsK KyBpbnQgQk5fbW9kX211bF9tb250Z29tZXJ5KEJJR05VTSAqcixjb25zdCBCSUdOVU0gKmEsY29u c3QgQklHTlVNICpiLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vYm5feDkzMXAu Yy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL2JuX3g5MzFwLmMKKy0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9ibi9ibl94OTMxcC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ibi9ibl94OTMxcC5jCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDI3MiBAQAorKy8qIGJuX3g5 MzFwLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5z c2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vu c2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5 cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0 c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGlt CisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVk ZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKworKy8qIFg5LjMxIHJvdXRp bmVzIGZvciBwcmltZSBkZXJpdmF0aW9uICovCisrCisrLyogWDkuMzEgcHJpbWUgZGVyaXZhdGlv bi4gVGhpcyBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwcmltZXMgcGkKKysgKiAocDEsIHAyLCBx MSwgcTIpIGZyb20gYSBwYXJhbWV0ZXIgWHBpIGJ5IGNoZWNraW5nIHN1Y2Nlc3NpdmUgb2RkCisr ICogaW50ZWdlcnMuCisrICovCisrCisrc3RhdGljIGludCBibl94OTMxX2Rlcml2ZV9waShCSUdO VU0gKnBpLCBjb25zdCBCSUdOVU0gKlhwaSwgQk5fQ1RYICpjdHgsCisrCQkJQk5fR0VOQ0IgKmNi KQorKwl7CisrCWludCBpID0gMDsKKysJaWYgKCFCTl9jb3B5KHBpLCBYcGkpKQorKwkJcmV0dXJu IDA7CisrCWlmICghQk5faXNfb2RkKHBpKSAmJiAhQk5fYWRkX3dvcmQocGksIDEpKQorKwkJcmV0 dXJuIDA7CisrCWZvcig7OykKKysJCXsKKysJCWkrKzsKKysJCUJOX0dFTkNCX2NhbGwoY2IsIDAs IGkpOworKwkJLyogTkIgMjcgTVIgaXMgc3BlY2lmaWNlZCBpbiBYOS4zMSAqLworKwkJaWYgKEJO X2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHBpLCAyNywgY3R4LCAxLCBjYikpCisrCQkJYnJlYWs7Cisr CQlpZiAoIUJOX2FkZF93b3JkKHBpLCAyKSkKKysJCQlyZXR1cm4gMDsKKysJCX0KKysJQk5fR0VO Q0JfY2FsbChjYiwgMiwgaSk7CisrCXJldHVybiAxOworKwl9CisrCisrLyogVGhpcyBpcyB0aGUg bWFpbiBYOS4zMSBwcmltZSBkZXJpdmF0aW9uIGZ1bmN0aW9uLiBGcm9tIHBhcmFtZXRlcnMKKysg KiBYcDEsIFhwMiBhbmQgWHAgZGVyaXZlIHRoZSBwcmltZSBwLiBJZiB0aGUgcGFyYW1ldGVycyBw MSBvciBwMiBhcmUKKysgKiBub3QgTlVMTCB0aGV5IHdpbGwgYmUgcmV0dXJuZWQgdG9vOiB0aGlz IGlzIG5lZWRlZCBmb3IgdGVzdGluZy4KKysgKi8KKysKKytpbnQgQk5fWDkzMV9kZXJpdmVfcHJp bWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAorKwkJCWNvbnN0IEJJR05V TSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBC SUdOVU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpCisrCXsKKysJaW50IHJldCA9IDA7 CisrCisrCUJJR05VTSAqdCwgKnAxcDIsICpwbTE7CisrCisrCS8qIE9ubHkgZXZlbiBlIHN1cHBv cnRlZCAqLworKwlpZiAoIUJOX2lzX29kZChlKSkKKysJCXJldHVybiAwOworKworKwlCTl9DVFhf c3RhcnQoY3R4KTsKKysJaWYgKCFwMSkKKysJCXAxID0gQk5fQ1RYX2dldChjdHgpOworKworKwlp ZiAoIXAyKQorKwkJcDIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCXQgPSBCTl9DVFhfZ2V0KGN0 eCk7CisrCisrCXAxcDIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCXBtMSA9IEJOX0NUWF9nZXQo Y3R4KTsKKysKKysJaWYgKCFibl94OTMxX2Rlcml2ZV9waShwMSwgWHAxLCBjdHgsIGNiKSkKKysJ CWdvdG8gZXJyOworKworKwlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAyLCBYcDIsIGN0eCwgY2Ip KQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fbXVsKHAxcDIsIHAxLCBwMiwgY3R4KSkKKysJ CWdvdG8gZXJyOworKworKwkvKiBGaXJzdCBzZXQgcCB0byB2YWx1ZSBvZiBScCAqLworKworKwlp ZiAoIUJOX21vZF9pbnZlcnNlKHAsIHAyLCBwMSwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlp ZiAoIUJOX211bChwLCBwLCBwMiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX21v ZF9pbnZlcnNlKHQsIHAxLCBwMiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX211 bCh0LCB0LCBwMSwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJOX3N1YihwLCBwLCB0 KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAocC0+bmVnICYmICFCTl9hZGQocCwgcCwgcDFwMikp CisrCQlnb3RvIGVycjsKKysKKysJLyogcCBub3cgZXF1YWxzIFJwICovCisrCisrCWlmICghQk5f bW9kX3N1YihwLCBwLCBYcCwgcDFwMiwgY3R4KSkKKysJCWdvdG8gZXJyOworKworKwlpZiAoIUJO X2FkZChwLCBwLCBYcCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogcCBub3cgZXF1YWxzIFlwMCAq LworKworKwlmb3IgKDs7KQorKwkJeworKwkJaW50IGkgPSAxOworKwkJQk5fR0VOQ0JfY2FsbChj YiwgMCwgaSsrKTsKKysJCWlmICghQk5fY29weShwbTEsIHApKQorKwkJCWdvdG8gZXJyOworKwkJ aWYgKCFCTl9zdWJfd29yZChwbTEsIDEpKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFCTl9nY2Qo dCwgcG0xLCBlLCBjdHgpKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKEJOX2lzX29uZSh0KQorKwkJ LyogWDkuMzEgc3BlY2lmaWVzIDggTVIgYW5kIDEgTHVjYXMgdGVzdCBvciBhbnkgcHJpbWUgdGVz dAorKwkJICogb2ZmZXJpbmcgc2ltaWxhciBvciBiZXR0ZXIgZ3VhcmFudGVlcyA1MCBNUiBpcyBj b25zaWRlcmFibHkgCisrCQkgKiBiZXR0ZXIuCisrCQkgKi8KKysJCQkmJiBCTl9pc19wcmltZV9m YXN0dGVzdF9leChwLCA1MCwgY3R4LCAxLCBjYikpCisrCQkJYnJlYWs7CisrCQlpZiAoIUJOX2Fk ZChwLCBwLCBwMXAyKSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJQk5fR0VOQ0JfY2FsbChj YiwgMywgMCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycjoKKysKKysJQk5fQ1RYX2VuZChjdHgp OworKworKwlyZXR1cm4gcmV0OworKwl9CisrCisrLyogR2VuZXJhdGUgcGFpciBvZiBwYXJhbXRl cnMgWHAsIFhxIGZvciBYOS4zMSBwcmltZSBnZW5lcmF0aW9uLgorKyAqIE5vdGU6IG5iaXRzIHBh cmFtdGVyIGlzIHN1bSBvZiBudW1iZXIgb2YgYml0cyBpbiBib3RoLgorKyAqLworKworK2ludCBC Tl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJO X0NUWCAqY3R4KQorKwl7CisrCUJJR05VTSAqdDsKKysJaW50IGk7CisrCS8qIE51bWJlciBvZiBi aXRzIGZvciBlYWNoIHByaW1lIGlzIG9mIHRoZSBmb3JtCisrCSAqIDUxMisxMjhzIGZvciBzID0g MCwgMSwgLi4uCisrCSAqLworKwlpZiAoKG5iaXRzIDwgMTAyNCkgfHwgKG5iaXRzICYgMHhmZikp CisrCQlyZXR1cm4gMDsKKysJbmJpdHMgPj49IDE7CisrCS8qIFRoZSByYW5kb20gdmFsdWUgWHAg bXVzdCBiZSBiZXR3ZWVuIHNxcnQoMikgKiAyXihuYml0cy0xKSBhbmQKKysJICogMl5uYml0cyAt IDEuIEJ5IHNldHRpbmcgdGhlIHRvcCB0d28gYml0cyB3ZSBlbnN1cmUgdGhhdCB0aGUgbG93ZXIK KysJICogYm91bmQgaXMgZXhjZWVkZWQuCisrCSAqLworKwlpZiAoIUJOX3JhbmQoWHAsIG5iaXRz LCAxLCAwKSkKKysJCXJldHVybiAwOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJdCA9IEJO X0NUWF9nZXQoY3R4KTsKKysKKysJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKKysJCXsKKysJ CWlmICghQk5fcmFuZChYcSwgbmJpdHMsIDEsIDApKQorKwkJCXJldHVybiAwOworKwkJLyogQ2hl Y2sgdGhhdCB8WHAgLSBYcXwgPiAyXihuYml0cyAtIDEwMCkgKi8KKysJCUJOX3N1Yih0LCBYcCwg WHEpOworKwkJaWYgKEJOX251bV9iaXRzKHQpID4gKG5iaXRzIC0gMTAwKSkKKysJCQlicmVhazsK KysJCX0KKysKKysJQk5fQ1RYX2VuZChjdHgpOworKworKwlpZiAoaSA8IDEwMDApCisrCQlyZXR1 cm4gMTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KKysKKysvKiBHZW5lcmF0ZSBwcmltZXMgdXNp bmcgWDkuMzEgYWxnb3JpdGhtLiBPZiB0aGUgdmFsdWVzIHAsIHAxLCBwMiwgWHAxCisrICogYW5k IFhwMiBvbmx5ICdwJyBuZWVkcyB0byBiZSBub24tTlVMTC4gSWYgYW55IG9mIHRoZSBvdGhlcnMg YXJlIG5vdCBOVUxMCisrICogdGhlIHJlbGV2YW50IHBhcmFtZXRlciB3aWxsIGJlIHN0b3JlZCBp biBpdC4KKysgKgorKyAqIER1ZSB0byB0aGUgZmFjdCB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRz IC0gMTAwKSBtdXN0IGJlIHNhdGlzZmllZCBYcCBhbmQgWHEKKysgKiBhcmUgZ2VuZXJhdGVkIHVz aW5nIHRoZSBwcmV2aW91cyBmdW5jdGlvbiBhbmQgc3VwcGxpZWQgYXMgaW5wdXQuCisrICovCisr CisraW50IEJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBC SUdOVU0gKnAyLAorKwkJCUJJR05VTSAqWHAxLCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBCSUdO VU0gKlhwLAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsCisrCQkJQk5fR0VOQ0Ig KmNiKQorKwl7CisrCWludCByZXQgPSAwOworKworKwlCTl9DVFhfc3RhcnQoY3R4KTsKKysJaWYg KCFYcDEpCisrCQlYcDEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCWlmICghWHAyKQorKwkJWHAyID0g Qk5fQ1RYX2dldChjdHgpOworKworKwlpZiAoIUJOX3JhbmQoWHAxLCAxMDEsIDAsIDApKQorKwkJ Z290byBlcnJvcjsKKysJaWYgKCFCTl9yYW5kKFhwMiwgMTAxLCAwLCAwKSkKKysJCWdvdG8gZXJy b3I7CisrCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocCwgcDEsIHAyLCBYcCwgWHAxLCBY cDIsIGUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysJcmV0ID0gMTsKKysKKysJZXJy b3I6CisrCUJOX0NUWF9lbmQoY3R4KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4w L2NyeXB0by9ibi9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL01ha2VmaWxl LmZpcHMJMjAwOC0xMS0xMiAwOToxOTowMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wL2NyeXB0by9ibi9NYWtlZmlsZQkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAorQEAgLTI2LDEzICsyNiwxMyBAQCBMSUJTUkM9CWJuX2FkZC5jIGJuX2Rpdi5jIGJuX2V4cC5j IGJuX2xpCisgCWJuX3ByaW50LmMgYm5fcmFuZC5jIGJuX3NoaWZ0LmMgYm5fd29yZC5jIGJuX2Js aW5kLmMgXAorIAlibl9rcm9uLmMgYm5fc3FydC5jIGJuX2djZC5jIGJuX3ByaW1lLmMgYm5fZXJy LmMgYm5fc3FyLmMgYm5fYXNtLmMgXAorIAlibl9yZWNwLmMgYm5fbW9udC5jIGJuX21waS5jIGJu X2V4cDIuYyBibl9nZjJtLmMgYm5fbmlzdC5jIFwKKy0JYm5fZGVwci5jIGJuX2NvbnN0LmMKKysJ Ym5fZGVwci5jIGJuX2NvbnN0LmMgYm5feDkzMXAuYworIAorIExJQk9CSj0JYm5fYWRkLm8gYm5f ZGl2Lm8gYm5fZXhwLm8gYm5fbGliLm8gYm5fY3R4Lm8gYm5fbXVsLm8gYm5fbW9kLm8gXAorIAli bl9wcmludC5vIGJuX3JhbmQubyBibl9zaGlmdC5vIGJuX3dvcmQubyBibl9ibGluZC5vIFwKKyAJ Ym5fa3Jvbi5vIGJuX3NxcnQubyBibl9nY2QubyBibl9wcmltZS5vIGJuX2Vyci5vIGJuX3Nxci5v ICQoQk5fQVNNKSBcCisgCWJuX3JlY3AubyBibl9tb250Lm8gYm5fbXBpLm8gYm5fZXhwMi5vIGJu X2dmMm0ubyBibl9uaXN0Lm8gXAorLQlibl9kZXByLm8gYm5fY29uc3QubworKwlibl9kZXByLm8g Ym5fY29uc3QubyBibl94OTMxcC5vCisgCisgU1JDPSAkKExJQlNSQykKKyAKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbC5maXBzIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbAorLS0tIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2NhbWVsbGlhL2FzbS9jbWxsLXg4Ni5wbC5maXBzCTIwMDktMDQtMDYgMTY6MjU6MDIu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvYXNtL2Nt bGwteDg2LnBsCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNzIyLDEy ICs3MjIsMTUgQEAgbXkgJGJpYXM9aW50KEBUWzBdKT9zaGlmdChAVCk6MDsKKyB9CisgJmZ1bmN0 aW9uX2VuZCgiQ2FtZWxsaWFfRWtleWdlbiIpOworIAorKyRzZXRrZXlmdW5jID0gIkNhbWVsbGlh X3NldF9rZXkiOworKyRzZXRrZXlmdW5jID0gInByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleSIgaWYg KCRFTlZ7RklQU30gbmUgIiIpOworKworIGlmICgkT1BFTlNTTCkgeworICMgaW50IENhbWVsbGlh X3NldF9rZXkgKAorICMJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksCisgIwkJaW50IGJp dHMsCisgIwkJQ0FNRUxMSUFfS0VZICprZXkpCistJmZ1bmN0aW9uX2JlZ2luX0IoIkNhbWVsbGlh X3NldF9rZXkiKTsKKysmZnVuY3Rpb25fYmVnaW5fQigkc2V0a2V5ZnVuYyk7CisgCSZwdXNoCSgi ZWJ4Iik7CisgCSZtb3YJKCJlY3giLCZ3cGFyYW0oMCkpOwkjIHB1bGwgYXJndW1lbnRzCisgCSZt b3YJKCJlYngiLCZ3cGFyYW0oMSkpOworQEAgLTc2MCw3ICs3NjMsNyBAQCBpZiAoJE9QRU5TU0wp IHsKKyAmc2V0X2xhYmVsKCJkb25lIiw0KTsKKyAJJnBvcAkoImVieCIpOworIAkmcmV0CSgpOwor LSZmdW5jdGlvbl9lbmRfQigiQ2FtZWxsaWFfc2V0X2tleSIpOworKyZmdW5jdGlvbl9lbmRfQigk c2V0a2V5ZnVuYyk7CisgfQorIAorIEBTQk9YPSgKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxp YS9jYW1lbGxpYS5oCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEu aC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMC9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAorQEAgLTg4LDYgKzg4LDExIEBAIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgCisg CX07CisgdHlwZWRlZiBzdHJ1Y3QgY2FtZWxsaWFfa2V5X3N0IENBTUVMTElBX0tFWTsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1 bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKysJQ0FNRUxMSUFfS0VZICpr ZXkpOworKyNlbmRpZgorKworIGludCBDYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNo YXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorIAlDQU1FTExJQV9LRVkgKmtleSk7CisgCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYy5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJsay5jCistLS0gb3BlbnNzbC0xLjAu MC9jcnlwdG8vY2FtZWxsaWEvY21sbF9mYmxrLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJs ay5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDY4IEBA CisrLyogY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhX21pc2MuYyAtKi0gbW9kZTpDOyBjLWZpbGUt c3R5bGU6ICJlYXkiIC0qLSAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDA2IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq CisrICovCisrIAorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvY2FtZWxsaWEuaD4KKysjaW5jbHVkZSAiY21sbF9sb2NsLmgiCisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IENhbWVsbGlh X3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisr CUNBTUVMTElBX0tFWSAqa2V5KQorKwl7CisrCWlmIChGSVBTX21vZGUoKSkKKysJCUZJUFNfQkFE X0FCT1JUKENBTUVMTElBKQorKwlyZXR1cm4gcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KHVzZXJL ZXksIGJpdHMsIGtleSk7CisrCX0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2NhbWVsbGlhL2NtbGxfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxs aWEvY21sbF9taXNjLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jbWxsX21p c2MuYy5maXBzCTIwMDgtMTAtMjggMTM6MTM6NTIuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4w MDAwMDAwMDAgKzAyMDAKK0BAIC01MiwxMSArNTIsMjAgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3Nsdi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2NhbWVsbGlhLmg+CisgI2luY2x1ZGUgImNt bGxfbG9jbC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgY29uc3QgY2hh ciBDQU1FTExJQV92ZXJzaW9uW109IkNBTUVMTElBIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Cisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkoY29u c3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisrCUNBTUVMTElBX0tF WSAqa2V5KQorKyNlbHNlCisgaW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hh ciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisgCUNBTUVMTElBX0tFWSAqa2V5KQorKyNlbmRp ZgorIAl7CisgCWlmKCF1c2VyS2V5IHx8ICFrZXkpCisgCQlyZXR1cm4gLTE7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxs aWEvTWFrZWZpbGUuZmlwcwkyMDA4LTEyLTIzIDEyOjMzOjAwLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCTIwMTAtMDMtMzAgMTA6MzM6 NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMjMsOSArMjMsOSBAQCBBUFBTPQorIAorIExJQj0kKFRP UCkvbGliY3J5cHRvLmEKKyBMSUJTUkM9Y2FtZWxsaWEuYyBjbWxsX21pc2MuYyBjbWxsX2VjYi5j IGNtbGxfY2JjLmMgY21sbF9vZmIuYyBcCistCSAgIGNtbGxfY2ZiLmMgY21sbF9jdHIuYyAKKysJ ICAgY21sbF9jZmIuYyBjbWxsX2N0ci5jIGNtbGxfZmJsay5jCisgCistTElCT0JKPSBjbWxsX2Vj Yi5vIGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpCisrTElCT0JK PSBjbWxsX2VjYi5vIGNtbGxfb2ZiLm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMp IGNtbGxfZmJsay5vCisgCisgU1JDPSAkKExJQlNSQykKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FzdC9jYXN0 LmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYXN0L2Nhc3QuaC5maXBzCTIwMTAtMDMtMzAg MTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FzdC9j YXN0LmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC04Myw3ICs4Myw5 IEBAIHR5cGVkZWYgc3RydWN0IGNhc3Rfa2V5X3N0CisgCWludCBzaG9ydF9rZXk7CS8qIFVzZSBy ZWR1Y2VkIHJvdW5kcyBmb3Igc2hvcnQga2V5ICovCisgCX0gQ0FTVF9LRVk7CisgCistIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMgCisrdm9pZCBwcml2YXRlX0NBU1Rfc2V0X2tleShDQVNUX0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKysjZW5kaWYKKyB2b2lk IENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFy ICpkYXRhKTsKKyB2b2lkIENBU1RfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4s IHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgQ0FTVF9LRVkgKmtleSwKKyAJCSAgICAgIGludCBl bmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FzdC9jX3NrZXkuYy5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2Nhc3QvY19za2V5LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0 by9jYXN0L2Nfc2tleS5jLmZpcHMJMjAwMC0wNi0wMyAxNjoxMzozNS4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYXN0L2Nfc2tleS5jCTIwMTAtMDMtMzAgMTA6MzM6 NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNTcsNiArNTcsMTEgQEAKKyAgKi8KKyAKKyAjaW5jbHVk ZSA8b3BlbnNzbC9jYXN0Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVm IE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAj aW5jbHVkZSAiY2FzdF9sY2wuaCIKKyAjaW5jbHVkZSAiY2FzdF9zLmgiCisgCitAQCAtNzIsNyAr NzcsNyBAQAorICNkZWZpbmUgUzYgQ0FTVF9TX3RhYmxlNgorICNkZWZpbmUgUzcgQ0FTVF9TX3Rh YmxlNworIAorLXZvaWQgQ0FTVF9zZXRfa2V5KENBU1RfS0VZICprZXksIGludCBsZW4sIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisrRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQoQ0FTVCkK KyAJeworIAlDQVNUX0xPTkcgeFsxNl07CisgCUNBU1RfTE9ORyB6WzE2XTsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY3J5 cHRvLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9jcnlwdG8uaC5maXBzCTIwMTAtMDMtMzAg MTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY3J5cHRv LmgJMjAxMC0wMy0zMCAxMDozNjowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC01NDcsMTIgKzU0Nyw3 MCBAQCB1bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpCisgI2RlZmluZSBP UEVOU1NMX2lhMzJjYXAgKCooT1BFTlNTTF9pYTMyY2FwX2xvYygpKSkKKyBpbnQgT1BFTlNTTF9p c3NlcnZpY2Uodm9pZCk7CisgCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNkZWZpbmUgRklQ U19FUlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKysJ CWFsZyAiIHByZXZpb3VzIEZJUFMgZm9yYmlkZGVuIGFsZ29yaXRobSBlcnJvciBpZ25vcmVkIik7 CisrCisrI2RlZmluZSBGSVBTX0JBRF9BQk9SVChhbGcpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9f TElORV9fLCBcCisrCQkjYWxnICIgQWxnb3JpdGhtIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUiKTsK KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTX1NUUklDVAorKyNkZWZpbmUgRklQU19CQURfQUxHT1JJ VEhNKGFsZykgRklQU19CQURfQUJPUlQoYWxnKQorKyNlbHNlCisrI2RlZmluZSBGSVBTX0JBRF9B TEdPUklUSE0oYWxnKSBcCisrCXsgXAorKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLEZJUFNf Ul9OT05fRklQU19NRVRIT0QpOyBcCisrCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiQWxnb3JpdGht PSIsICNhbGcpOyBcCisrCXJldHVybiAwOyBcCisrCX0KKysjZW5kaWYKKysKKysvKiBMb3cgbGV2 ZWwgZGlnZXN0IEFQSSBibG9ja2luZyBtYWNybyAqLworKworKyNkZWZpbmUgRklQU19OT05fRklQ U19NRF9Jbml0KGFsZykgXAorKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIFwKKysJCXsg XAorKwkJaWYgKEZJUFNfbW9kZSgpKSBcCisrCQkJRklQU19CQURfQUxHT1JJVEhNKGFsZykgXAor KwkJcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBcCisrCQl9IFwKKysJaW50IHByaXZh dGVfIyNhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykKKysKKysvKiBGb3IgY2lwaGVycyB0aGUgQVBJ IG9mdGVuIHZhcmllcyBmcm9tIGNpcGhlciB0byBjaXBoZXIgYW5kIGVhY2ggbmVlZHMgdG8KKysg KiBiZSB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlLiBWYXJpYWJsZSBrZXkgbGVuZ3RoIGNpcGhl cnMgKEJsb3dmaXNoLCBSQzQsCisrICogQ0FTVCkgaG93ZXZlciBhcmUgdmVyeSBzaW1pbGFyIGFu ZCBjYW4gdXNlIGEgYmxvY2tpbmcgbWFjcm8uCisrICovCisrCisrI2RlZmluZSBGSVBTX05PTl9G SVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKKysJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKSBcCisrCQl7IFwKKysJCWlm IChGSVBTX21vZGUoKSkgXAorKwkJCUZJUFNfQkFEX0FCT1JUKGFsZykgXAorKwkJcHJpdmF0ZV8j I2FsZyMjX3NldF9rZXkoa2V5LCBsZW4sIGRhdGEpOyBcCisrCQl9IFwKKysJdm9pZCBwcml2YXRl XyMjYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtleSwgaW50IGxlbiwgXAorKwkJCQkJY29uc3Qg dW5zaWduZWQgY2hhciAqZGF0YSkKKysKKysjZWxzZQorKworKyNkZWZpbmUgRklQU19OT05fRklQ U19WQ0lQSEVSX0luaXQoYWxnKSBcCisrCXZvaWQgYWxnIyNfc2V0X2tleShhbGcjI19LRVkgKmtl eSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKysKKysjZGVmaW5lIEZJUFNf Tk9OX0ZJUFNfTURfSW5pdChhbGcpIFwKKysJaW50IGFsZyMjX0luaXQoYWxnIyNfQ1RYICpjKSAK KysKKysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLworKworIC8qIEJFR0lOIEVSUk9SIENP REVTICovCisgLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhl IHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKyAgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQg bWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KKyAgKi8KKyB2 b2lkIEVSUl9sb2FkX0NSWVBUT19zdHJpbmdzKHZvaWQpOworIAorKyNkZWZpbmUgT1BFTlNTTF9I QVZFX0lOSVQJMQorK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7CisrCisgLyogRXJy b3IgY29kZXMgZm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNv ZGVzLiAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaF9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2RoL2RoX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAyMjoyOTozNy4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaF9lcnIuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAw MDAwMDAwMCArMDIwMAorQEAgLTczLDYgKzczLDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBE SF9zdHJfZnVuY3RzW109Cisge0VSUl9GVU5DKERIX0ZfQ09NUFVURV9LRVkpLAkiQ09NUFVURV9L RVkifSwKKyB7RVJSX0ZVTkMoREhfRl9ESFBBUkFNU19QUklOVF9GUCksCSJESHBhcmFtc19wcmlu dF9mcCJ9LAorIHtFUlJfRlVOQyhESF9GX0RIX0JVSUxUSU5fR0VOUEFSQU1TKSwJIkRIX0JVSUxU SU5fR0VOUEFSQU1TIn0sCisre0VSUl9GVU5DKERIX0ZfREhfQ09NUFVURV9LRVkpLAkiREhfY29t cHV0ZV9rZXkifSwKKyt7RVJSX0ZVTkMoREhfRl9ESF9HRU5FUkFURV9LRVkpLAkiREhfZ2VuZXJh dGVfa2V5In0sCisge0VSUl9GVU5DKERIX0ZfREhfTkVXX01FVEhPRCksCSJESF9uZXdfbWV0aG9k In0sCisge0VSUl9GVU5DKERIX0ZfREhfUEFSQU1fREVDT0RFKSwJIkRIX1BBUkFNX0RFQ09ERSJ9 LAorIHtFUlJfRlVOQyhESF9GX0RIX1BSSVZfREVDT0RFKSwJIkRIX1BSSVZfREVDT0RFIn0sCitA QCAtOTQsNiArOTYsNyBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERIX3N0cl9yZWFzb25zW109 Cisge0VSUl9SRUFTT04oREhfUl9CTl9FUlJPUikgICAgICAgICAgICAgICAsImJuIGVycm9yIn0s Cisge0VSUl9SRUFTT04oREhfUl9ERUNPREVfRVJST1IpICAgICAgICAgICAsImRlY29kZSBlcnJv ciJ9LAorIHtFUlJfUkVBU09OKERIX1JfSU5WQUxJRF9QVUJLRVkpICAgICAgICAgLCJpbnZhbGlk IHB1YmxpYyBrZXkifSwKKyt7RVJSX1JFQVNPTihESF9SX0tFWV9TSVpFX1RPT19TTUFMTCkgICAg ICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9SRUFTT04oREhfUl9LRVlTX05PVF9TRVQp ICAgICAgICAgICAsImtleXMgbm90IHNldCJ9LAorIHtFUlJfUkVBU09OKERIX1JfTU9EVUxVU19U T09fTEFSR0UpICAgICAgLCJtb2R1bHVzIHRvbyBsYXJnZSJ9LAorIHtFUlJfUkVBU09OKERIX1Jf Tk9fUEFSQU1FVEVSU19TRVQpICAgICAgLCJubyBwYXJhbWV0ZXJzIHNldCJ9LAorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9kaC9kaF9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJ MjAwNS0wNC0yNiAyMDo1MzoxNS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9kaC9kaF9nZW4uYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAg LTY1LDYgKzY1LDEwIEBACisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisgCisgc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LCBpbnQg cHJpbWVfbGVuLCBpbnQgZ2VuZXJhdG9yLCBCTl9HRU5DQiAqY2IpOworIAorQEAgLTEwNiw2ICsx MTAsMjAgQEAgc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAorIAlpbnQg Zyxvaz0gLTE7CisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfREhf QlVJTFRJTl9HRU5QQVJBTVMsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVy biAwOworKwkJfQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgKHByaW1lX2xlbiA8IE9QRU5TU0xf REhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfREhfQlVJTFRJ Tl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJ fQorKyNlbmRpZgorKworIAljdHg9Qk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5VTEwpIGdv dG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2RoL2RoLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaC5oCistLS0gb3BlbnNz bC0xLjAuMC9jcnlwdG8vZGgvZGguaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGguaAkyMDEwLTAzLTMwIDEwOjMz OjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTc3LDYgKzc3LDggQEAKKyAjIGRlZmluZSBPUEVOU1NM X0RIX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xf REhfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjZGVmaW5lIERIX0ZMQUdfQ0FDSEVf TU9OVF9QICAgICAweDAxCisgI2RlZmluZSBESF9GTEFHX05PX0VYUF9DT05TVFRJTUUgMHgwMiAv KiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWlsdC1pbiBESAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gbm93IHVzZXMgY29uc3RhbnQgdGlt ZQorQEAgLTI0MSw2ICsyNDMsOCBAQCB2b2lkIEVSUl9sb2FkX0RIX3N0cmluZ3Modm9pZCk7Cisg I2RlZmluZSBESF9GX0dFTkVSQVRFX1BBUkFNRVRFUlMJCQkgMTA0CisgI2RlZmluZSBESF9GX1BL RVlfREhfREVSSVZFCQkJCSAxMTIKKyAjZGVmaW5lIERIX0ZfUEtFWV9ESF9LRVlHRU4JCQkJIDEx MworKyNkZWZpbmUgREhfRl9ESF9DT01QVVRFX0tFWQkJCQkgMTE0CisrI2RlZmluZSBESF9GX0RI X0dFTkVSQVRFX0tFWQkJCSAxMTUKKyAKKyAvKiBSZWFzb24gY29kZXMuICovCisgI2RlZmluZSBE SF9SX0JBRF9HRU5FUkFUT1IJCQkJIDEwMQorQEAgLTI1Myw2ICsyNTcsNyBAQCB2b2lkIEVSUl9s b2FkX0RIX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBESF9SX05PX1BBUkFNRVRFUlNfU0VUCQkJ CSAxMDcKKyAjZGVmaW5lIERIX1JfTk9fUFJJVkFURV9WQUxVRQkJCQkgMTAwCisgI2RlZmluZSBE SF9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJCSAxMDUKKysjZGVmaW5lIERIX1JfS0VZX1NJ WkVfVE9PX1NNQUxMCQkJCSAxMTAKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgfQorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9kaC9kaF9rZXkuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoX2tleS5jLmZp cHMJMjAwNy0wMy0yOCAwMjoxNToyMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9kaC9kaF9rZXkuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAor QEAgLTYxLDYgKzYxLDkgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorICNpbmNsdWRlIDxv cGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisgCisgc3RhdGljIGlu dCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBzdGF0aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVk IGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpOworQEAgLTEwNyw2ICsx MTAsMTQgQEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQorIAlCTl9NT05UX0NUWCAq bW9udD1OVUxMOworIAlCSUdOVU0gKnB1Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgt PnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIo REhfRl9HRU5FUkFURV9LRVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAw OworKwkJfQorKyNlbmRpZgorKworIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0g TlVMTCkgZ290byBlcnI7CisgCitAQCAtMTg0LDYgKzE5NSwxMyBAQCBzdGF0aWMgaW50IGNvbXB1 dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtlCisgCQlESGVycihESF9GX0NPTVBVVEVfS0VZLERIX1Jf TU9EVUxVU19UT09fTEFSR0UpOworIAkJZ290byBlcnI7CisgCQl9CisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xf REhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURIZXJyKERIX0ZfQ09NUFVURV9L RVksIERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRp ZgorIAorIAljdHggPSBCTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7 CitAQCAtMjUxLDYgKzI2OSw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAq ZGgsIEIKKyAKKyBzdGF0aWMgaW50IGRoX2luaXQoREggKmRoKQorIAl7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCWRoLT5mbGFncyB8 PSBESF9GTEFHX0NBQ0hFX01PTlRfUDsKKyAJcmV0dXJuKDEpOworIAl9CitkaWZmIC11cCBvcGVu c3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8v ZHNhL2RzYV9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlw cwkyMDA4LTEyLTI2IDE4OjE3OjIxLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAK K0BAIC03Nyw4ICs3NywxMiBAQAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZHNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorICNpbmNsdWRlIDxvcGVuc3Ns L3NoYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisgI2luY2x1ZGUgImRzYV9sb2NsLmgiCisgCisgaW50IERTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KERTQSAqcmV0LCBpbnQgYml0cywKK0BAIC0xMjYsNiArMTMwLDIxIEBAIGlu dCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAJQk5fQ1RYICpjdHg9TlVM TDsKKyAJdW5zaWduZWQgaW50IGg9MjsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0Ff QlVJTFRJTl9QQVJBTUdFTiwKKysJCSAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwor KwkgICAgZ290byBlcnI7CisrCSAgICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAoYml0cyA8 IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNB X0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQln b3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKHFzaXplICE9IFNIQV9ESUdFU1RfTEVO R1RIICYmIHFzaXplICE9IFNIQTIyNF9ESUdFU1RfTEVOR1RIICYmCisgCSAgICBxc2l6ZSAhPSBT SEEyNTZfRElHRVNUX0xFTkdUSCkKKyAJCS8qIGludmFsaWQgcSBzaXplICovCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9k c2EvZHNhLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhLmguZmlwcwkyMDEwLTAz LTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Rz YS9kc2EuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTg4LDYgKzg4 LDggQEAKKyAjIGRlZmluZSBPUEVOU1NMX0RTQV9NQVhfTU9EVUxVU19CSVRTCTEwMDAwCisgI2Vu ZGlmCisgCisrI2RlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAor KworICNkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QCTB4MDEKKyAjZGVmaW5lIERTQV9GTEFH X05PX0VYUF9DT05TVFRJTUUgICAgICAgMHgwMiAvKiBuZXcgd2l0aCAwLjkuN2g7IHRoZSBidWls dC1pbiBEU0EKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCitAQCAtOTcsNiArOTksMjEg QEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZSB1 c2VkIGZvciBhbGwgZXhwb25lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqLworIAorKy8qIElmIHRoaXMgZmxhZyBpcyBzZXQgdGhlIERTQSBtZXRo b2QgaXMgRklQUyBjb21wbGlhbnQgYW5kIGNhbiBiZSB1c2VkCisrICogaW4gRklQUyBtb2RlLiBU aGlzIGlzIHNldCBpbiB0aGUgdmFsaWRhdGVkIG1vZHVsZSBtZXRob2QuIElmIGFuCisrICogYXBw bGljYXRpb24gc2V0cyB0aGlzIGZsYWcgaW4gaXRzIG93biBtZXRob2RzIGl0IGlzIGl0cyByZXBv c2liaWxpdHkKKysgKiB0byBlbnN1cmUgdGhlIHJlc3VsdCBpcyBjb21wbGlhbnQuCisrICovCisr CisrI2RlZmluZSBEU0FfRkxBR19GSVBTX01FVEhPRAkJCTB4MDQwMAorKworKy8qIElmIHRoaXMg ZmxhZyBpcyBzZXQgdGhlIG9wZXJhdGlvbnMgbm9ybWFsbHkgZGlzYWJsZWQgaW4gRklQUyBtb2Rl IGFyZQorKyAqIHBlcm1pdHRlZCBpdCBpcyB0aGVuIHRoZSBhcHBsaWNhdGlvbnMgcmVzcG9uc2li aWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlCisrICogdXNhZ2UgaXMgY29tcGxpYW50LgorKyAqLwor KworKyNkZWZpbmUgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJCQkweDA0MDAKKysKKyAjaWZkZWYg IF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtMjcwLDggKzI4NywxMSBA QCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgRFNBX0ZfRE9fRFNB X1BSSU5UCQkJCSAxMDQKKyAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVAkJCQkgMTAwCisg I2RlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlAJCQkgMTAxCisrI2RlZmluZSBEU0FfRl9E U0FfQlVJTFRJTl9LRVlHRU4JCQkgMTI0CisrI2RlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJB TUdFTgkJCSAxMjMKKyAjZGVmaW5lIERTQV9GX0RTQV9ET19TSUdOCQkJCSAxMTIKKyAjZGVmaW5l IERTQV9GX0RTQV9ET19WRVJJRlkJCQkJIDExMworKyNkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRF X1BBUkFNRVRFUlMJCQkgMTI1CisgI2RlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRAkJCQkgMTAz CisgI2RlZmluZSBEU0FfRl9EU0FfUEFSQU1fREVDT0RFCQkJCSAxMTkKKyAjZGVmaW5lIERTQV9G X0RTQV9QUklOVF9GUAkJCQkgMTA1CitAQCAtMjk2LDkgKzMxNiwxMiBAQCB2b2lkIEVSUl9sb2Fk X0RTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgRFNBX1JfREFUQV9UT09fTEFSR0VfRk9SX0tF WV9TSVpFCQkgMTAwCisgI2RlZmluZSBEU0FfUl9ERUNPREVfRVJST1IJCQkJIDEwNAorICNkZWZp bmUgRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRQkJCSAxMDYKKysjZGVmaW5lIERTQV9SX0tFWV9T SVpFX1RPT19TTUFMTAkJCSAxMTAKKyAjZGVmaW5lIERTQV9SX01JU1NJTkdfUEFSQU1FVEVSUwkJ CSAxMDEKKyAjZGVmaW5lIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFCQkJCSAxMDMKKysjZGVmaW5l IERTQV9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTExCisgI2RlZmluZSBEU0FfUl9OT19QQVJBTUVU RVJTX1NFVAkJCQkgMTA3CisrI2RlZmluZSBEU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5f RklQU19NT0RFCSAxMTIKKyAjZGVmaW5lIERTQV9SX1BBUkFNRVRFUl9FTkNPRElOR19FUlJPUgkJ CSAxMDUKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Ny eXB0by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYV9rZXku YworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcwkyMDA3LTAzLTI4 IDAyOjE1OjI1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9k c2Ffa2V5LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC02Myw5ICs2 Myw1NSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZHNh Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgor IAorIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERTQSAqZHNhKTsKKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGludCBmaXBzX2RzYV9wYWlyd2lzZV9mYWlsID0gMDsK KysKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19kc2Ff cGFpcndpc2VfZmFpbCA9IDE7CisrCX0KKysKKytpbnQgZmlwc19jaGVja19kc2EoRFNBICpkc2Ep CisrCXsKKysJRVZQX1BLRVkgKnBrOworKwl1bnNpZ25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWly d2lzZSBDaGVjayBEYXRhIjsKKysJaW50IHJldCA9IDA7CisrCisrICAgIAlpZiAoKHBrPUVWUF9Q S0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfRFNB KHBrLCBkc2EpOworKworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAt MSwKKysJCQkJCU5VTEwsIDAsIEVWUF9zaGExKCksIDAsIE5VTEwpKQorKwkJZ290byBlcnI7Cisr CisrCXJldCA9IDE7CisrCisrZXJyOgorKwlpZiAocmV0ID09IDApCisrCQl7CisrCQlmaXBzX3Nl dF9zZWxmdGVzdF9mYWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX0RTQSxGSVBT X1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKwkJfQorKworKwlpZiAocGspCisrCQlFVlBfUEtF WV9mcmVlKHBrKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgorKworIGludCBEU0Ff Z2VuZXJhdGVfa2V5KERTQSAqZHNhKQorIAl7CisgCWlmKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikK K0BAIC03OSw2ICsxMjUsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpk c2EpCisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tl eT1OVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChC Tl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkK KysJCXsKKysJCURTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCk7CisrCQlnb3RvIGVycjsKKysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9 Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKKyAKKyAJaWYgKGRzYS0+cHJpdl9rZXkg PT0gTlVMTCkKK0BAIC0xMTcsNiArMTcxLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5 Z2VuKERTQSAqZHNhKQorIAorIAlkc2EtPnByaXZfa2V5PXByaXZfa2V5OworIAlkc2EtPnB1Yl9r ZXk9cHViX2tleTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJ CXsKKysJCWlmIChmaXBzX2RzYV9wYWlyd2lzZV9mYWlsKQorKwkJCUJOX2FkZF93b3JkKGRzYS0+ cHViX2tleSwgMSk7CisrCQlpZighZmlwc19jaGVja19kc2EoZHNhKSkKKysJCSAgICBnb3RvIGVy cjsKKysJCX0KKysjZW5kaWYKKyAJb2s9MTsKKyAKKyBlcnI6CitkaWZmIC11cCBvcGVuc3NsLTEu MC4wL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9k c2Ffb3NzbC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcwky MDA3LTAzLTI4IDAyOjE1OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2RzYS9kc2Ffb3NzbC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitA QCAtNjUsNiArNjUsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorICNpbmNsdWRlIDxv cGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBzdGF0aWMg RFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduZWQgY2hhciAqZGdzdCwgaW50IGRsZW4s IERTQSAqZHNhKTsKKyBzdGF0aWMgaW50IGRzYV9zaWduX3NldHVwKERTQSAqZHNhLCBCTl9DVFgg KmN0eF9pbiwgQklHTlVNICoqa2ludnAsIEJJR05VTSAqKnJwKTsKK0BAIC04Miw3ICs4NSw3IEBA IE5VTEwsIC8qIGRzYV9tb2RfZXhwLCAqLworIE5VTEwsIC8qIGRzYV9ibl9tb2RfZXhwLCAqLwor IGRzYV9pbml0LAorIGRzYV9maW5pc2gsCistMCwKKytEU0FfRkxBR19GSVBTX01FVEhPRCwKKyBO VUxMLAorIE5VTEwsCisgTlVMTAorQEAgLTEzNyw2ICsxNDAsMjAgQEAgc3RhdGljIERTQV9TSUcg KmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbgorIAlpbnQgcmVhc29uPUVSUl9SX0JOX0xJQjsKKyAJ RFNBX1NJRyAqcmV0PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX3Nl bGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RPX1NJ R04sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiBOVUxMOworKwkg ICAgfQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVO U1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJyKERTQV9GX0RT QV9ET19TSUdOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJcmV0dXJuIE5VTEw7Cisr CQl9CisrI2VuZGlmCisrCisgCUJOX2luaXQoJm0pOworIAlCTl9pbml0KCZ4cik7CisgCitAQCAt MzEyLDYgKzMyOSwyMCBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQg CisgCQlyZXR1cm4gLTE7CisgCQl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfRFNBX0RP X1ZFUklGWSxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIC0xOwor KwkgICAgfQorKworKwlpZiAoRklQU19tb2RlKCkgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBP UEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJRFNBZXJyKERTQV9G X0RTQV9ET19WRVJJRlksIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlyZXR1cm4gLTE7 CisrCQl9CisrI2VuZGlmCisrCisgCWkgPSBCTl9udW1fYml0cyhkc2EtPnEpOworIAkvKiBmaXBz IDE4Ni0zIGFsbG93cyBvbmx5IGRpZmZlcmVudCBzaXplcyBmb3IgcSAqLworIAlpZiAoaSAhPSAx NjAgJiYgaSAhPSAyMjQgJiYgaSAhPSAyNTYpCitAQCAtNDAzLDYgKzQzNCw5IEBAIHN0YXRpYyBp bnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25lZCAKKyAKKyBzdGF0aWMgaW50IGRzYV9pbml0 KERTQSAqZHNhKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKKysjZW5kaWYKKyAJZHNhLT5mbGFnc3w9RFNBX0ZMQUdfQ0FDSEVfTU9OVF9QOworIAly ZXR1cm4oMSk7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXJyL2Vycl9hbGwu Yy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Vyci9lcnJfYWxsLmMKKy0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9lcnIvZXJyX2FsbC5jLmZpcHMJMjAwOS0wOC0wOSAxNjo1ODowNS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9lcnIvZXJyX2FsbC5jCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtOTYsNiArOTYsOSBAQAorICNpbmNsdWRl IDxvcGVuc3NsL29jc3AuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC90cy5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX0NNUworICNpbmNsdWRlIDxvcGVu c3NsL2Ntcy5oPgorICNlbmRpZgorQEAgLTE0OSw2ICsxNTIsOSBAQCB2b2lkIEVSUl9sb2FkX2Ny eXB0b19zdHJpbmdzKHZvaWQpCisgI2VuZGlmCisgCUVSUl9sb2FkX09DU1Bfc3RyaW5ncygpOwor IAlFUlJfbG9hZF9VSV9zdHJpbmdzKCk7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlFUlJfbG9h ZF9GSVBTX3N0cmluZ3MoKTsKKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisgCUVS Ul9sb2FkX0NNU19zdHJpbmdzKCk7CisgI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ldnAvZGlnZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZGlnZXN0LmMK Ky0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDEwLTAzLTA1IDE0 OjMzOjQzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9kaWdl c3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTExNiw2ICsxMTYs NyBAQAorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAjaW5jbHVkZSA8b3BlbnNzbC9lbmdp bmUuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyB2b2lkIEVWUF9NRF9D VFhfaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsKK0BAIC0xMzgsOSArMTM5LDUwIEBAIGludCBF VlBfRGlnZXN0SW5pdChFVlBfTURfQ1RYICpjdHgsIGNvbnMKKyAJcmV0dXJuIEVWUF9EaWdlc3RJ bml0X2V4KGN0eCwgdHlwZSwgTlVMTCk7CisgCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CisrLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVt cHQgdG8gdXNlIG5vbiBGSVBTCisrICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9y ZSB0aGUgZXJyb3JzLgorKyAqLworKworK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX01EX0NUWCAq Y3R4KQorKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsgcmV0dXJuIDA7fQor KworK3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsY29uc3Qgdm9pZCAqZGF0 YSxzaXplX3QgY291bnQpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7 IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsdW5z aWduZWQgY2hhciAqbWQpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsg cmV0dXJuIDA7fQorKworK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0KKysJeworKwkwLAor KwkwLAorKwkwLAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFkX3VwZGF0ZSwKKysJYmFkX2ZpbmFs LAorKwlOVUxMLAorKwlOVUxMLAorKwlOVUxMLAorKwkwLAorKwl7MCwwLDAsMH0sCisrCX07Cisr CisrI2VuZGlmCisrCisgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgY29u c3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCisgCXsKKyAJRVZQX01EX0NUWF9jbGVhcl9m bGFncyhjdHgsRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VW UF9ESUdFU1RJTklUX0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgtPmRp Z2VzdCA9ICZiYWRfbWQ7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAjaWZuZGVmIE9Q RU5TU0xfTk9fRU5HSU5FCisgCS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBj YW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29udGV4dHMKKyAJICogc28gdGhpcyBjb250ZXh0IG1h eSBhbHJlYWR5IGhhdmUgYW4gRU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCitAQCAtMTk3 LDYgKzIzOSwxOCBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCisg I2VuZGlmCisgCWlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKQorIAkJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJCQl7CisrCQkJaWYgKCEodHlwZS0+ZmxhZ3Mg JiBFVlBfTURfRkxBR19GSVBTKSAKKysJCQkgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9G TEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQkJeworKwkJCQlFVlBlcnIoRVZQX0ZfRVZQX0RJR0VT VElOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysJCQkJY3R4LT5kaWdlc3QgPSAm YmFkX21kOworKwkJCQlyZXR1cm4gMDsKKysJCQkJfQorKwkJCX0KKysjZW5kaWYKKyAJCWlmIChj dHgtPmRpZ2VzdCAmJiBjdHgtPmRpZ2VzdC0+Y3R4X3NpemUpCisgCQkJT1BFTlNTTF9mcmVlKGN0 eC0+bWRfZGF0YSk7CisgCQljdHgtPmRpZ2VzdD10eXBlOworQEAgLTIzMCw2ICsyODQsOSBAQCBz a2lwX3RvX2luaXQ6CisgCisgaW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBj b25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcmV0dXJuIGN0eC0+dXBkYXRl KGN0eCxkYXRhLGNvdW50KTsKKyAJfQorIAorQEAgLTI0Niw2ICszMDMsOSBAQCBpbnQgRVZQX0Rp Z2VzdEZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zCisgaW50IEVWUF9EaWdlc3RGaW5hbF9leChF VlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm1kLCB1bnNpZ25lZCBpbnQgKnNpemUpCisg CXsKKyAJaW50IHJldDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKKysjZW5kaWYKKyAKKyAJT1BFTlNTTF9hc3NlcnQoY3R4LT5kaWdlc3QtPm1kX3NpemUg PD0gRVZQX01BWF9NRF9TSVpFKTsKKyAJcmV0PWN0eC0+ZGlnZXN0LT5maW5hbChjdHgsbWQpOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfYWVzLmMuZmlwcyBvcGVuc3NsLTEu MC4wL2NyeXB0by9ldnAvZV9hZXMuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX2Fl cy5jLmZpcHMJMjAwNC0wMS0yOCAyMDowNTozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ldnAvZV9hZXMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCAr MDIwMAorQEAgLTY5LDMyICs2OSwyOSBAQCB0eXBlZGVmIHN0cnVjdAorIAorIElNUExFTUVOVF9C TE9DS19DSVBIRVIoYWVzXzEyOCwga3MsIEFFUywgRVZQX0FFU19LRVksCisgCQkgICAgICAgTklE X2Flc18xMjgsIDE2LCAxNiwgMTYsIDEyOCwKKy0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5V TEwsIAorLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgICAgRVZQX0NJ UEhFUl9nZXRfYXNuMV9pdiwKKy0JCSAgICAgICBOVUxMKQorKwkJICAgICAgIEVWUF9DSVBIX0ZM QUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgICBhZXNfaW5pdF9r ZXksCisrCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKyBJTVBMRU1FTlRfQkxPQ0tf Q0lQSEVSKGFlc18xOTIsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAorIAkJICAgICAgIE5JRF9hZXNf MTkyLCAxNiwgMjQsIDE2LCAxMjgsCistCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAK Ky0JCSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJICAgICAgIEVWUF9DSVBIRVJf Z2V0X2FzbjFfaXYsCistCQkgICAgICAgTlVMTCkKKysJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJ UFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgICAgYWVzX2luaXRfa2V5LAor KwkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisgSU1QTEVNRU5UX0JMT0NLX0NJUEhF UihhZXNfMjU2LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKKyAJCSAgICAgICBOSURfYWVzXzI1Niwg MTYsIDMyLCAxNiwgMTI4LAorLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwgCistCQkg ICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgICBFVlBfQ0lQSEVSX2dldF9h c24xX2l2LAorLQkJICAgICAgIE5VTEwpCistCistI2RlZmluZSBJTVBMRU1FTlRfQUVTX0NGQlIo a3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGFlcyxBRVMsRVZQX0FFU19LRVksa3Msa3NpemUs Y2JpdHMsMTYpCistCistSU1QTEVNRU5UX0FFU19DRkJSKDEyOCwxKQorLUlNUExFTUVOVF9BRVNf Q0ZCUigxOTIsMSkKKy1JTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDEpCistCistSU1QTEVNRU5UX0FF U19DRkJSKDEyOCw4KQorLUlNUExFTUVOVF9BRVNfQ0ZCUigxOTIsOCkKKy1JTVBMRU1FTlRfQUVT X0NGQlIoMjU2LDgpCisrCQkgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdf REVGQVVMVF9BU04xLAorKwkJICAgICAgIGFlc19pbml0X2tleSwKKysJCSAgICAgICBOVUxMLCBO VUxMLCBOVUxMLCBOVUxMKQorKworKyNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJSKGtzaXplLGNi aXRzLGZsYWdzKQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXplLGNi aXRzLDE2LGZsYWdzKQorKworK0lNUExFTUVOVF9BRVNfQ0ZCUigxMjgsMSxFVlBfQ0lQSF9GTEFH X0ZJUFMpCisrSU1QTEVNRU5UX0FFU19DRkJSKDE5MiwxLEVWUF9DSVBIX0ZMQUdfRklQUykKKytJ TVBMRU1FTlRfQUVTX0NGQlIoMjU2LDEsRVZQX0NJUEhfRkxBR19GSVBTKQorKworK0lNUExFTUVO VF9BRVNfQ0ZCUigxMjgsOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrSU1QTEVNRU5UX0FFU19DRkJS KDE5Miw4LEVWUF9DSVBIX0ZMQUdfRklQUykKKytJTVBMRU1FTlRfQUVTX0NGQlIoMjU2LDgsRVZQ X0NJUEhfRkxBR19GSVBTKQorIAorIHN0YXRpYyBpbnQgYWVzX2luaXRfa2V5KEVWUF9DSVBIRVJf Q1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKyAJCSAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKml2LCBpbnQgZW5jKQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2Vf Y2FtZWxsaWEuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMKKy0t LSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9jYW1lbGxpYS5jLmZpcHMJMjAwNi0wOC0zMSAy Mjo1NjoyMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9j YW1lbGxpYS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtOTMsNyAr OTMsNyBAQCBJTVBMRU1FTlRfQkxPQ0tfQ0lQSEVSKGNhbWVsbGlhXzI1Niwga3MsCisgCUVWUF9D SVBIRVJfZ2V0X2FzbjFfaXYsCisgCU5VTEwpCisgCistI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxM SUFfQ0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQ X0NBTUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywxNikKKysjZGVmaW5lIElNUExFTUVOVF9DQU1F TExJQV9DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxF VlBfQ0FNRUxMSUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2LDApCisgCisgSU1QTEVNRU5UX0NBTUVM TElBX0NGQlIoMTI4LDEpCisgSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoMTkyLDEpCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ldnAvZV9kZXMzLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9kZXMzLmMu ZmlwcwkyMDA4LTEyLTI5IDEzOjM1OjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAorQEAgLTIwNiw5ICsyMDYsOSBAQCBzdGF0aWMgaW50IGRlc19lZGUzX2NmYjhfY2lwaGVyKEVW UF9DSVBICisgICAgIH0KKyAKKyBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tF WSwgTklEX2Rlc19lZGUsIDgsIDE2LCA4LCA2NCwKKy0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVz X2VkZV9pbml0X2tleSwgTlVMTCwgCistCQkJRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCQlF VlBfQ0lQSEVSX2dldF9hc24xX2l2LAorKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxB R19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJCWRlc19lZGVfaW5pdF9rZXks CisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlkZXMzX2N0cmwpCisgCisgI2RlZmluZSBkZXNf ZWRlM19jZmI2NF9jaXBoZXIgZGVzX2VkZV9jZmI2NF9jaXBoZXIKK0BAIC0yMTcsMjEgKzIxNywy MSBAQCBCTE9DS19DSVBIRVJfZGVmcyhkZXNfZWRlLCBERVNfRURFX0tFWSwgCisgI2RlZmluZSBk ZXNfZWRlM19lY2JfY2lwaGVyIGRlc19lZGVfZWNiX2NpcGhlcgorIAorIEJMT0NLX0NJUEhFUl9k ZWZzKGRlc19lZGUzLCBERVNfRURFX0tFWSwgTklEX2Rlc19lZGUzLCA4LCAyNCwgOCwgNjQsCist CQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBf Q0lQSEVSX3NldF9hc24xX2l2LAorLQkJCUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBf Q0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FT TjEsCisrCQkJZGVzX2VkZTNfaW5pdF9rZXksCisrCQkJTlVMTCwgTlVMTCwgTlVMTCwKKyAJCQlk ZXMzX2N0cmwpCisgCisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVks TklEX2Rlc19lZGUzLDI0LDgsMSwKKy0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUz X2luaXRfa2V5LE5VTEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAg IEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9G TEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUzX2lu aXRfa2V5LAorKwkJICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwpCisg CisgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoZGVzX2VkZTMsREVTX0VERV9LRVksTklEX2Rlc19lZGUz LDI0LDgsOCwKKy0JCSAgICAgRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGUzX2luaXRfa2V5LE5V TEwsCistCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgIEVWUF9DSVBIRVJf Z2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQ X0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkgICAgIGRlc19lZGUzX2luaXRfa2V5LAorKwkJ ICAgICBOVUxMLCBOVUxMLCBOVUxMLAorIAkJICAgICBkZXMzX2N0cmwpCisgCisgc3RhdGljIGlu dCBkZXNfZWRlX2luaXRfa2V5KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmtleSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX251bGwuYy5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX251bGwuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMDgtMTAtMzEgMjA6NDg6MjQuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfbnVsbC5jCTIwMTAtMDMtMzAgMTA6MzM6 NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJ UEhFUiBuX2NpcGhlcj0KKyAJeworIAlOSURfdW5kZWYsCisgCTEsMCwwLAorLQkwLAorKwlFVlBf Q0lQSF9GTEFHX0ZJUFMsCisgCW51bGxfaW5pdF9rZXksCisgCW51bGxfY2lwaGVyLAorIAlOVUxM LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfcmM0LmMuZmlwcyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ldnAvZV9yYzQuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9l X3JjNC5jLmZpcHMJMjAwOC0xMC0zMSAyMDo0ODoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9ldnAvZV9yYzQuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAw MCArMDIwMAorQEAgLTY0LDYgKzY0LDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+Cisr I2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgLyogRklYTUU6IHN1cmVseSB0aGlzIGlzIGF2YWls YWJsZSBlbHNld2hlcmU/ICovCisgI2RlZmluZSBFVlBfUkM0X0tFWV9TSVpFCQkxNgorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2V2cC9ldnBfZW5jLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2Vu Yy5jLmZpcHMJMjAxMC0wMy0wMSAwMjo1Mjo0Ny4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ldnAvZXZwX2VuYy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAw ICswMjAwCitAQCAtNjgsOCArNjgsNTMgQEAKKyAKKyBjb25zdCBjaGFyIEVWUF92ZXJzaW9uW109 IkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysK KysvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1w dCB0byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdub3Jl IHRoZSBlcnJvcnMuCisrICovCisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NU WCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrCQkgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqaXYsIGludCBlbmMpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgaW5pdCIp OyByZXR1cm4gMDt9CisrCisrc3RhdGljIGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4s IHVuc2lnbmVkIGludCBpbmwpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBkYXRl Iik7IHJldHVybiAwO30KKysKKysvKiBOQjogbm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93 ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KKysKKytzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBf Q0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQo IkNpcGhlciBzZXRfYXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGljIGludCBiYWRfZ2V0X2FzbjEo RVZQX0NJUEhFUl9DVFggKmN0eCwgQVNOMV9UWVBFICp0eXApCisrCXsgRklQU19FUlJPUl9JR05P UkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsgcmV0dXJuIDA7fQorK3N0YXRpYyBpbnQgYmFkX2N0cmwo RVZQX0NJUEhFUl9DVFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKKysJeyBG SVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7IHJldHVybiAwO30KKysKKytzdGF0aWMg Y29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0KKysJeworKwkwLAorKwkwLAorKwkwLAorKwkw LAorKwkwLAorKwliYWRfaW5pdCwKKysJYmFkX2RvX2NpcGhlciwKKysJTlVMTCwKKysJMCwKKysJ YmFkX3NldF9hc24xLAorKwliYWRfZ2V0X2FzbjEsCisrCWJhZF9jdHJsLAorKwlOVUxMCisrCX07 CisrCisrI2VuZGlmCisrCisgdm9pZCBFVlBfQ0lQSEVSX0NUWF9pbml0KEVWUF9DSVBIRVJfQ1RY ICpjdHgpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2so KTsKKysjZW5kaWYKKyAJbWVtc2V0KGN0eCwwLHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOworIAkv KiBjdHgtPmNpcGhlcj1OVUxMOyAqLworIAl9CitAQCAtMTAxLDYgKzE0NiwxNCBAQCBpbnQgRVZQ X0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgCQkJZW5jID0gMTsKKyAJCWN0eC0+ ZW5jcnlwdCA9IGVuYzsKKyAJCX0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9F WCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJY3R4LT5jaXBoZXIgPSAmYmFkX2Np cGhlcjsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19F TkdJTkUKKyAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2Vk IG9uICJGaW5hbCInZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQgbWF5IGFscmVhZHkg aGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0yMTksNiArMjcyLDIy IEBAIHNraXBfdG9faW5pdDoKKyAJCX0KKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ LyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5vIGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBw ZXJtaXNzaWJsZS4KKysJICogU28gb25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQg dGhpcyBwb2ludC4KKysJICovCisrCWlmIChrZXkgJiYgRklQU19tb2RlKCkpCisrCQl7CisrCQlp ZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrCQkJJiAhKGN0 eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkKKysJCQl7CisrCQkJRVZQ ZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Cisr CQkJY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9 CisrI2VuZGlmCisrCisgCWlmKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhf QUxXQVlTX0NBTExfSU5JVCkpIHsKKyAJCWlmKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsa2V5LGl2 LGVuYykpIHJldHVybiAwOworIAl9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv ZXZwX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9lcnIuYworLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfZXJyLmMuZmlwcwkyMDEwLTAyLTA3IDE0OjQxOjIz LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfZXJyLmMJ MjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNTUsNiArMTU1LDcgQEAg c3RhdGljIEVSUl9TVFJJTkdfREFUQSBFVlBfc3RyX3JlYXNvbnNbXQorIHtFUlJfUkVBU09OKEVW UF9SX0RFQ09ERV9FUlJPUikgICAgICAgICAgLCJkZWNvZGUgZXJyb3IifSwKKyB7RVJSX1JFQVNP TihFVlBfUl9ESUZGRVJFTlRfS0VZX1RZUEVTKSAgICwiZGlmZmVyZW50IGtleSB0eXBlcyJ9LAor IHtFUlJfUkVBU09OKEVWUF9SX0RJRkZFUkVOVF9QQVJBTUVURVJTKSAgLCJkaWZmZXJlbnQgcGFy YW1ldGVycyJ9LAorK3tFUlJfUkVBU09OKEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKSAgICAgLCJk aXNhYmxlZCBmb3IgZmlwcyJ9LAorIHtFUlJfUkVBU09OKEVWUF9SX0VOQ09ERV9FUlJPUikgICAg ICAgICAgLCJlbmNvZGUgZXJyb3IifSwKKyB7RVJSX1JFQVNPTihFVlBfUl9FVlBfUEJFX0NJUEhF UklOSVRfRVJST1IpLCJldnAgcGJlIGNpcGhlcmluaXQgZXJyb3IifSwKKyB7RVJSX1JFQVNPTihF VlBfUl9FWFBFQ1RJTkdfQU5fUlNBX0tFWSkgICwiZXhwZWN0aW5nIGFuIHJzYSBrZXkifSwKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2V2cC9ldnAuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnAuaC5maXBz CTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZXZwL2V2cC5oCTIwMTAtMDMtMzAgMTA6NDA6MTIuMDAwMDAwMDAwICswMjAwCitAQCAt NzUsNiArNzUsMTAgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKyAjZW5kaWYKKyAKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KworIC8qCisgI2RlZmluZSBFVlBfUkMyX0tFWV9TSVpFCQkxNgorICNkZWZpbmUgRVZQX1JDNF9L RVlfU0laRQkJMTYKK0BAIC0xOTcsNiArMjAxLDggQEAgdHlwZWRlZiBpbnQgZXZwX3ZlcmlmeV9t ZXRob2QoaW50IHR5cGUsYworIAorICNkZWZpbmUgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lH TkFUVVJFCTB4MDAwNAorIAorKyNkZWZpbmUgRVZQX01EX0ZMQUdfRklQUwkweDA0MDAgLyogTm90 ZSBpZiBzdWl0YWJsZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLworKworIC8qIERpZ2VzdEFsZ29y aXRobUlkZW50aWZpZXIgZmxhZ3MuLi4gKi8KKyAKKyAjZGVmaW5lIEVWUF9NRF9GTEFHX0RJR0FM R0lEX01BU0sJCTB4MDAxOAorQEAgLTI2OSwxMCArMjc1LDYgQEAgc3RydWN0IGVudl9tZF9jdHhf c3QKKyAJCQkJCQkqIGNsZWFuZWQgKi8KKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19SRVVTRQkJ MHgwMDA0IC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRhCisgCQkJCQkJKiBpbiBFVlBfTURf Q1RYX2NsZWFudXAgKi8KKy0vKiBGSVBTIGFuZCBwYWQgb3B0aW9ucyBhcmUgaWdub3JlZCBpbiAx LjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUKKy0gKiBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkg cmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMuCistICovCistCisgI2RlZmluZSBF VlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cJMHgwMDA4CS8qIEFsbG93IHVzZSBvZiBub24g RklQUyBkaWdlc3QKKyAJCQkJCQkgKiBpbiBGSVBTIG1vZGUgKi8KKyAKK0BAIC0yODQsNiArMjg2 LDEwIEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0CisgI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BLQ1MxCTB4MDAJLyogUEtDUyMxIHYxLjUgbW9kZSAqLworICNkZWZpbmUgRVZQX01EX0NUWF9G TEFHX1BBRF9YOTMxCTB4MTAJLyogWDkuMzEgbW9kZSAqLworICNkZWZpbmUgRVZQX01EX0NUWF9G TEFHX1BBRF9QU1MJCTB4MjAJLyogUFNTIG1vZGUgKi8KKysjZGVmaW5lIE1fRVZQX01EX0NUWF9G TEFHX1BTU19TQUxUKGN0eCkgXAorKwkJKChjdHgtPmZsYWdzPj4xNikgJjB4RkZGRikgLyogc2Vl ZCBsZW5ndGggKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4JMHhGRkZGCS8q IHNhbHQgbGVuIHNhbWUgYXMgZGlnZXN0ICovCisrI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNT X01SRUMJMHhGRkZFCS8qIHNhbHQgbWF4IG9yIGF1dG8gcmVjb3ZlcmVkICovCisgCisgI2RlZmlu ZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVAkJMHgwMTAwIC8qIERvbid0IGluaXRpYWxpemUgbWRf ZGF0YSAqLworIAorQEAgLTMzMCwxMiArMzM2LDE2IEBAIHN0cnVjdCBldnBfY2lwaGVyX3N0Cisg I2RlZmluZSAJRVZQX0NJUEhfTk9fUEFERElORwkJMHgxMDAKKyAvKiBjaXBoZXIgaGFuZGxlcyBy YW5kb20ga2V5IGdlbmVyYXRpb24gKi8KKyAjZGVmaW5lIAlFVlBfQ0lQSF9SQU5EX0tFWQkJMHgy MDAKKy0vKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCist I2RlZmluZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwCisrLyogTm90ZSBpZiBzdWl0YWJs ZSBmb3IgdXNlIGluIEZJUFMgbW9kZSAqLworKyNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfRklQUwkJ MHg0MDAKKysvKiBBbGxvdyBub24gRklQUyBjaXBoZXIgaW4gRklQUyBtb2RlICovCisrI2RlZmlu ZQkJRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVwkweDgwMAorIC8qIEFsbG93IHVzZSBkZWZh dWx0IEFTTjEgZ2V0L3NldCBpdiAqLworICNkZWZpbmUJCUVWUF9DSVBIX0ZMQUdfREVGQVVMVF9B U04xCTB4MTAwMAorIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXM6IENGQjEgbW9k ZSBvbmx5ICovCisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUwkweDIwMDAKKysv KiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCisrI2RlZmlu ZSAJRVZQX0NJUEhfQ1VTVE9NX0NPUFkJCTB4NDAwMAorIAorIC8qIGN0cmwoKSB2YWx1ZXMgKi8K KyAKK0BAIC0xMjM5LDYgKzEyNDksNyBAQCB2b2lkIEVSUl9sb2FkX0VWUF9zdHJpbmdzKHZvaWQp OworICNkZWZpbmUgRVZQX1JfREVDT0RFX0VSUk9SCQkJCSAxMTQKKyAjZGVmaW5lIEVWUF9SX0RJ RkZFUkVOVF9LRVlfVFlQRVMJCQkgMTAxCisgI2RlZmluZSBFVlBfUl9ESUZGRVJFTlRfUEFSQU1F VEVSUwkJCSAxNTMKKysjZGVmaW5lIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTCQkJCSAxNjAKKyAj ZGVmaW5lIEVWUF9SX0VOQ09ERV9FUlJPUgkJCQkgMTE1CisgI2RlZmluZSBFVlBfUl9FVlBfUEJF X0NJUEhFUklOSVRfRVJST1IJCQkgMTE5CisgI2RlZmluZSBFVlBfUl9FWFBFQ1RJTkdfQU5fUlNB X0tFWQkJCSAxMjcKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfbGliLmMu ZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2xpYi5jCistLS0gb3BlbnNzbC0xLjAu MC9jcnlwdG8vZXZwL2V2cF9saWIuYy5maXBzCTIwMTAtMDEtMjYgMTU6MzM6NTEuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDEwLTAzLTMw IDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTY3LDYgKzY3LDggQEAgaW50IEVWUF9DSVBI RVJfcGFyYW1fdG9fYXNuMShFVlBfQ0lQSEVSXworIAorIAlpZiAoYy0+Y2lwaGVyLT5zZXRfYXNu MV9wYXJhbWV0ZXJzICE9IE5VTEwpCisgCQlyZXQ9Yy0+Y2lwaGVyLT5zZXRfYXNuMV9wYXJhbWV0 ZXJzKGMsdHlwZSk7CisrCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFH X0RFRkFVTFRfQVNOMSkKKysJCXJldD1FVlBfQ0lQSEVSX3NldF9hc24xX2l2KGMsIHR5cGUpOwor IAllbHNlCisgCQlyZXQ9LTE7CisgCXJldHVybihyZXQpOworQEAgLTc4LDYgKzgwLDggQEAgaW50 IEVWUF9DSVBIRVJfYXNuMV90b19wYXJhbShFVlBfQ0lQSEVSXworIAorIAlpZiAoYy0+Y2lwaGVy LT5nZXRfYXNuMV9wYXJhbWV0ZXJzICE9IE5VTEwpCisgCQlyZXQ9Yy0+Y2lwaGVyLT5nZXRfYXNu MV9wYXJhbWV0ZXJzKGMsdHlwZSk7CisrCWVsc2UgaWYgKGMtPmNpcGhlci0+ZmxhZ3MgJiBFVlBf Q0lQSF9GTEFHX0RFRkFVTFRfQVNOMSkKKysJCXJldD1FVlBfQ0lQSEVSX2dldF9hc24xX2l2KGMs IHR5cGUpOworIAllbHNlCisgCQlyZXQ9LTE7CisgCXJldHVybihyZXQpOworQEAgLTE4Niw2ICsx OTAsOSBAQCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCisgCisgaW50 IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25z dCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgaW50IGlubCkKKyAJeworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlyZXR1cm4gY3R4 LT5jaXBoZXItPmRvX2NpcGhlcihjdHgsb3V0LGluLGlubCk7CisgCX0KKyAKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZXZwL2V2cF9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2xvY2wu aC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL2V2cF9sb2NsLmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAg KzAyMDAKK0BAIC0yNTQsMTQgKzI1NCwzMiBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfIyNjbmFt ZSMjX2VjYih2b2lkCisgCisgI2RlZmluZSBFVlBfQ19EQVRBKGtzdHJ1Y3QsIGN0eCkJKChrc3Ry dWN0ICopKGN0eCktPmNpcGhlcl9kYXRhKQorIAorLSNkZWZpbmUgSU1QTEVNRU5UX0NGQlIoY2lw aGVyLGNwcmVmaXgsa3N0cnVjdCxrc2NoZWQsa2V5c2l6ZSxjYml0cyxpdl9sZW4pIFwKKysjZGVm aW5lIElNUExFTUVOVF9DRkJSKGNpcGhlcixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNpemUs Y2JpdHMsaXZfbGVuLGZsKSBcCisgCUJMT0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18jI2tl eXNpemUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtzY2hlZCkgXAorIAlCTE9DS19DSVBIRVJfZGVm X2NmYihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVjdCwgXAorIAkJCSAgICAgTklEXyMjY2lwaGVy IyNfIyNrZXlzaXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwKKy0JCQkgICAgIDAsIGNp cGhlciMjX2luaXRfa2V5LCBOVUxMLCBcCistCQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2 LCBcCistCQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LCBcCistCQkJICAgICBOVUxMKQor KwkJCSAgICAgKGZsKXxFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwgXAorKwkJCSAgICAgY2lw aGVyIyNfaW5pdF9rZXksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCisrCisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNkZWZpbmUgUkMyX3NldF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQorKyNkZWZp bmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9SQzRfc2V0X2tleQorKyNkZWZpbmUgQ0FTVF9zZXRfa2V5 CXByaXZhdGVfQ0FTVF9zZXRfa2V5CisrI2RlZmluZSBSQzVfMzJfc2V0X2tleQlwcml2YXRlX1JD NV8zMl9zZXRfa2V5CisrI2RlZmluZSBCRl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQorKyNk ZWZpbmUgU0VFRF9zZXRfa2V5CXByaXZhdGVfU0VFRF9zZXRfa2V5CisrI2RlZmluZSBDYW1lbGxp YV9zZXRfa2V5IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleQorKyNkZWZpbmUgaWRlYV9zZXRfZW5j cnlwdF9rZXkgcHJpdmF0ZV9pZGVhX3NldF9lbmNyeXB0X2tleQorKworKyNkZWZpbmUgTUQ1X0lu aXQJcHJpdmF0ZV9NRDVfSW5pdAorKyNkZWZpbmUgTUQ0X0luaXQJcHJpdmF0ZV9NRDRfSW5pdAor KyNkZWZpbmUgTUQyX0luaXQJcHJpdmF0ZV9NRDJfSW5pdAorKyNkZWZpbmUgTURDMl9Jbml0CXBy aXZhdGVfTURDMl9Jbml0CisrI2RlZmluZSBTSEFfSW5pdAlwcml2YXRlX1NIQV9Jbml0CisrI2Rl ZmluZSBSSVBFTUQxNjBfSW5pdAlwcml2YXRlX1JJUEVNRDE2MF9Jbml0CisrI2RlZmluZSBXSElS TFBPT0xfSW5pdAlwcml2YXRlX1dISVJMUE9PTF9Jbml0CisrCisrI2VuZGlmCisgCisgc3RydWN0 IGV2cF9wa2V5X2N0eF9zdAorIAl7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv bV9kc3MuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX2Rzcy5jCistLS0gb3BlbnNz bC0xLjAuMC9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcwkyMDA2LTA0LTE5IDE5OjA1OjU3LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX2Rzcy5jCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtODEsNyArODEsNyBAQCBzdGF0aWMgY29u c3QgRVZQX01EIGRzYV9tZD0KKyAJTklEX2RzYVdpdGhTSEEsCisgCU5JRF9kc2FXaXRoU0hBLAor IAlTSEFfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCisrCUVWUF9N RF9GTEFHX1BLRVlfRElHRVNUfEVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQsCisgCXVwZGF0ZSwK KyAJZmluYWwsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlw cyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9kc3MxLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ldnAvbV9kc3MxLmMuZmlwcwkyMDA2LTA0LTE5IDE5OjA1OjU3LjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX2RzczEuYwkyMDEwLTAzLTMwIDEwOjMz OjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9N RCBkc3MxX21kPQorIAlOSURfZHNhLAorIAlOSURfZHNhV2l0aFNIQTEsCisgCVNIQV9ESUdFU1Rf TEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9E SUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5hbCwKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kYzIuYy5maXBzIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2V2cC9tX21kYzIuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21k YzIuYy5maXBzCTIwMTAtMDItMDIgMTQ6MzY6MDUuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC9jcnlwdG8vZXZwL21fbWRjMi5jCTIwMTAtMDMtMzAgMTA6NTc6MDIuMDAwMDAwMDAw ICswMjAwCitAQCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAjaW5j bHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAK KyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBNREMyX0luaXQo Y3R4LT5tZF9kYXRhKTsgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fbWQy LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDIuYworLS0tIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2V2cC9tX21kMi5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDIuYwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjaWZuZGVmIE9QRU5T U0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2VuZGlmCisrI2luY2x1ZGUg ImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyBy ZXR1cm4gTUQyX0luaXQoY3R4LT5tZF9kYXRhKTsgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZXZwL21fbWQ0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDQuYwor LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kNC5jLmZpcHMJMjAwNS0wNy0xNiAxNDoz NzozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDQu YwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAK KyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2Vu ZGlmCisrI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9D VFggKmN0eCkKKyAJeyByZXR1cm4gTUQ0X0luaXQoY3R4LT5tZF9kYXRhKTsgfQorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fbWQ1LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9ldnAvbV9tZDUuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kNS5jLmZpcHMJ MjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ldnAvbV9tZDUuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAg LTY4LDYgKzY4LDcgQEAKKyAjaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5z c2wvcnNhLmg+CisgI2VuZGlmCisrI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGlu dCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4gTUQ1X0luaXQoY3R4LT5tZF9kYXRh KTsgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fcmlwZW1kLmMuZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9yaXBlbWQuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2V2cC9tX3JpcGVtZC5jLmZpcHMJMjAwNS0wNy0xNiAxNDozNzozMi4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9yaXBlbWQuYwkyMDEwLTAzLTMwIDEw OjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjaWZuZGVmIE9QRU5T U0xfTk9fUlNBCisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2VuZGlmCisrI2luY2x1ZGUg ImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBpbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeyBy ZXR1cm4gUklQRU1EMTYwX0luaXQoY3R4LT5tZF9kYXRhKTsgfQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21f c2hhMS5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fc2hhMS5jLmZpcHMJMjAwOC0w My0xMiAyMjoxNDoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9l dnAvbV9zaGExLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC04Miw3 ICs4Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMV9tZD0KKyAJTklEX3NoYTEsCisgCU5J RF9zaGExV2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURf RkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAor KwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRlLAorIAlmaW5h bCwKK0BAIC0xMTksNyArMTIwLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRfbWQ9Cisg CU5JRF9zaGEyMjQsCisgCU5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBMjI0X0RJ R0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURf RkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlp bml0MjI0LAorIAl1cGRhdGUyNTYsCisgCWZpbmFsMjU2LAorQEAgLTEzOCw3ICsxNDAsOCBAQCBz dGF0aWMgY29uc3QgRVZQX01EIHNoYTI1Nl9tZD0KKyAJTklEX3NoYTI1NiwKKyAJTklEX3NoYTI1 NldpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEyNTZfRElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZM QUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJ RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQyNTYsCisgCXVwZGF0ZTI1NiwKKyAJ ZmluYWwyNTYsCitAQCAtMTY5LDcgKzE3Miw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMzg0 X21kPQorIAlOSURfc2hhMzg0LAorIAlOSURfc2hhMzg0V2l0aFJTQUVuY3J5cHRpb24sCisgCVNI QTM4NF9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8 RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQ UywKKyAJaW5pdDM4NCwKKyAJdXBkYXRlNTEyLAorIAlmaW5hbDUxMiwKK0BAIC0xODgsNyArMTky LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQ9CisgCU5JRF9zaGE1MTIsCisgCU5J RF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBNTEyX0RJR0VTVF9MRU5HVEgsCistCUVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdB TEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0NTEyLAorIAl1cGRhdGU1 MTIsCisgCWZpbmFsNTEyLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fd3Au Yy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX3dwLmMKKy0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9ldnAvbV93cC5jLmZpcHMJMjAwNS0xMS0zMCAyMTo1NzoyMy4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV93cC5jCTIwMTAtMDMtMzAgMTA6MzM6 NDYuMDAwMDAwMDAwICswMjAwCitAQCAtOSw2ICs5LDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9v YmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorICNpbmNsdWRlIDxvcGVuc3Ns L3docmxwb29sLmg+CisrI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCisgc3RhdGljIGludCBpbml0 KEVWUF9NRF9DVFggKmN0eCkKKyAJeyByZXR1cm4gV0hJUkxQT09MX0luaXQoY3R4LT5tZF9kYXRh KTsgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL25hbWVzLmMuZmlwcyBvcGVu c3NsLTEuMC4wL2NyeXB0by9ldnAvbmFtZXMuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2 cC9uYW1lcy5jLmZpcHMJMjAxMC0wMy0wNiAyMTo0Nzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbmFtZXMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAorQEAgLTY2LDYgKzY2LDEwIEBAIGludCBFVlBfYWRkX2NpcGhlcihjb25zdCBF VlBfQ0lQSEVSICpjKQorIAl7CisgCWludCByOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ T1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysjZW5kaWYKKysKKyAJcj1PQkpfTkFNRV9hZGQoT0JK X25pZDJzbihjLT5uaWQpLE9CSl9OQU1FX1RZUEVfQ0lQSEVSX01FVEgsKGNvbnN0IGNoYXIgKilj KTsKKyAJaWYgKHIgPT0gMCkgcmV0dXJuKDApOworIAljaGVja19kZWZlcihjLT5uaWQpOworQEAg LTc5LDYgKzgzLDEwIEBAIGludCBFVlBfYWRkX2RpZ2VzdChjb25zdCBFVlBfTUQgKm1kKQorIAlp bnQgcjsKKyAJY29uc3QgY2hhciAqbmFtZTsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCU9Q RU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrI2VuZGlmCisrCisgCW5hbWU9T0JKX25pZDJzbihtZC0+ dHlwZSk7CisgCXI9T0JKX05BTUVfYWRkKG5hbWUsT0JKX05BTUVfVFlQRV9NRF9NRVRILChjb25z dCBjaGFyICopbWQpOworIAlpZiAociA9PSAwKSByZXR1cm4oMCk7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv cF9zaWduLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvcF9zaWduLmMuZmlwcwkyMDA2 LTA1LTI0IDE1OjI5OjMwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2V2cC9wX3NpZ24uYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTYx LDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAjaW5jbHVkZSA8b3BlbnNz bC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgorIAorICNpZmRlZiB1bmRlZgorIHZvaWQgRVZQX1NpZ25Jbml0KEVWUF9NRF9D VFggKmN0eCwgRVZQX01EICp0eXBlKQorQEAgLTEwMSw2ICsxMDIsMjIgQEAgaW50IEVWUF9TaWdu RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnNpZworIAkJCWdvdG8gZXJyOworIAkJaWYgKEVWUF9Q S0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJCQln b3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQor KwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURE SU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NU WF9GTEFHX1BBRF9QU1MpCisrCQkJeworKwkJCWludCBzYWx0bGVuOworKwkJCWlmIChFVlBfUEtF WV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9IDAp CisrCQkJCWdvdG8gZXJyOworKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FM VChjdHgpOworKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisr CQkJCXNhbHRsZW4gPSAtMTsKKysJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxB R19QU1NfTVJFQykKKysJCQkJc2FsdGxlbiA9IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0 X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7Cisr CQkJfQorIAkJaWYgKEVWUF9QS0VZX3NpZ24ocGtjdHgsIHNpZ3JldCwgJnNsdG1wLCBtLCBtX2xl bikgPD0gMCkKKyAJCQlnb3RvIGVycjsKKyAJCSpzaWdsZW4gPSBzbHRtcDsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZXZwL3BfdmVyaWZ5LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvcF92ZXJpZnku Yy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAg KzAyMDAKK0BAIC02MSw2ICs2MSw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2lu Y2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAKKyBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9D VFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLAorIAkgICAgIHVuc2lnbmVkIGlu dCBzaWdsZW4sIEVWUF9QS0VZICpwa2V5KQorQEAgLTg2LDYgKzg3LDIyIEBAIGludCBFVlBfVmVy aWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb24KKyAJCQlnb3RvIGVycjsKKyAJCWlmIChFVlBf UEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0eCwgY3R4LT5kaWdlc3QpIDw9IDApCisgCQkJ Z290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkK KysJCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFE RElORykgPD0gMCkKKysJCQkJZ290byBlcnI7CisrCQlpZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9D VFhfRkxBR19QQURfUFNTKQorKwkJCXsKKysJCQlpbnQgc2FsdGxlbjsKKysJCQlpZiAoRVZQX1BL RVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PSAw KQorKwkJCQlnb3RvIGVycjsKKysJCQlzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NB TFQoY3R4KTsKKysJCQlpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOKQor KwkJCQlzYWx0bGVuID0gLTE7CisrCQkJZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZM QUdfUFNTX01SRUMpCisrCQkJCXNhbHRsZW4gPSAtMjsKKysJCQlpZiAoRVZQX1BLRVlfQ1RYX3Nl dF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCisrCQkJCWdvdG8gZXJyOwor KwkJCX0KKyAJCWkgPSBFVlBfUEtFWV92ZXJpZnkocGtjdHgsIHNpZ2J1Ziwgc2lnbGVuLCBtLCBt X2xlbik7CisgCQllcnI6CisgCQlFVlBfUEtFWV9DVFhfZnJlZShwa2N0eCk7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jCistLS0gb3BlbnNzbC0xLjAuMC9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Fl c2F2cy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDkz OSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrICBOSVNUIEFFUyBBbGdvcml0aG0gVmFsaWRhdGlv biBTdWl0ZQorKyAgVGVzdCBQcm9ncmFtCisrCisrICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6Cisr ICBWLU9ORSBDb3Jwb3JhdGlvbgorKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKKysg IEdlcm1hbnRvd24sIE1EIDIwODc0CisrICBVLlMuQS4KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNp bmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGVycm5v Lmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgImVf b3MuaCIKKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgQUVTIHN1cHBvcnRcbiIpOwor KyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUg MTYKKysKKysjZGVmaW5lIFZFUkJPU0UgMAorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK2ludCBBRVNUZXN0KEVWUF9DSVBIRVJfQ1RY ICpjdHgsCisrCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtl eSwgCisrCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKKysJICAgIGludCBkaXIsICAvKiAwID0g ZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJICAgIHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwg dW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbikKKysgICAgeworKyAgICBjb25zdCBF VlBfQ0lQSEVSICpjaXBoZXIgPSBOVUxMOworKworKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwg IkNCQyIpID09IDApCisrCXsKKysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoK KysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5 MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOworKwkJYnJlYWs7CisrCisrCQljYXNl IDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOworKwkJYnJlYWs7CisrCQl9Cisr CisrCX0KKysgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCisrCXsK KysJc3dpdGNoIChha2V5c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9h ZXNfMTI4X2VjYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVW UF9hZXNfMTkyX2VjYigpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9 IEVWUF9hZXNfMjU2X2VjYigpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBpZiAo c3RyY2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDApCisrCXsKKysJc3dpdGNoIChha2V5c3op CisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEyOCgpOwor KwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEy OCgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2 X2NmYjEyOCgpOworKwkJYnJlYWs7CisrCQl9CisrCisrCX0KKysgICAgZWxzZSBpZiAoc3RybmNh c2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJ eworKwkJY2FzZSAxMjg6CisrCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9vZmIoKTsKKysJCWJyZWFr OworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9vZmIoKTsKKysJCWJy ZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9vZmIoKTsKKysJ CWJyZWFrOworKwkJfQorKwl9CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEi KSkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVy ID0gRVZQX2Flc18xMjhfY2ZiMSgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNp cGhlciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6Cisr CQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAg ICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCisrCXsKKysJc3dpdGNoIChha2V5 c3opCisrCQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjgoKTsK KysJCWJyZWFrOworKworKwkJY2FzZSAxOTI6CisrCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmI4 KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZf Y2ZiOCgpOworKwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZQorKwl7CisrCXByaW50Zigi VW5rbm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOworKwlyZXR1cm4gMDsKKysJfQorKyAgICBpZiAo IWNpcGhlcikKKysJeworKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3op OworKwlyZXR1cm4gMDsgCisrCX0KKysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lw aGVyLCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCisrCXJldHVybiAwOworKyAgICBpZigh c3RyY2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhj dHgsIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOworKyAgICBpZiAoZGlyKQorKwkJRVZQX0Np cGhlcihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKKysJZWxzZQorKwkJRVZQX0Np cGhlcihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysgICAgcmV0dXJuIDE7Cisr ICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KKytjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQifTsKKytj aGFyICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCMTI4 In07CisrZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkIxMjh9OworK2Vu dW0gWENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9OworKworKy8qPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0qLworKy8qICBNb250ZSBDYXJsbyBUZXN0cyAgICAgICAgICAqLworKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworKy8qI2RlZmluZSBnYihhLGIpICgoKGEp WyhiKS84XSA+PiAoKGIpJTgpKSYxKSovCisrLyojZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84 XT0oKGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCghISh2KSA8PCAoKGIpJTgpKSkqLworKwor KyNkZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKDctKGIpJTgpKSYxKQorKyNkZWZpbmUg c2IoYSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoNy0oYiklOCkpKXwoISEo dikgPDwgKDctKGIpJTgpKSkKKysKKytpbnQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKKysJICAgaW50 IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNpZ25lZCBjaGFyICppVmVjLAorKwkgICBp bnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAorKwkgICBGSUxFICpyZnApCisr ICAgIHsKKysgICAgaW50IHJldCA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwMV1bMzJd OworKyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVTX0JMT0NLX1NJWkVdOworKyAgICB1bnNp Z25lZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKKysgICAgdW5zaWduZWQgY2hhciBjdGV4dFsxMDAx XVszMl07CisrICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs2NCs0XTsKKysgICAgaW50IGks IGosIG4sIG4xLCBuMjsKKysgICAgaW50IGltb2RlID0gMCwgbmtleXN6ID0gYWtleXN6Lzg7Cisr ICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsK KysKKysgICAgaWYgKGxlbiA+IDMyKQorKwl7CisrCXByaW50ZigiXG4+Pj4+IExlbmd0aCBleGNl ZWRzIDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAorKwkgICAgICAgYW1vZGUsIGFrZXlzeik7Cisr CXJldHVybiAtMTsKKysJfQorKyAgICBmb3IgKGltb2RlID0gMDsgaW1vZGUgPCA2OyArK2ltb2Rl KQorKwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1vZGVdKSA9PSAwKQorKwkgICAgYnJlYWs7 CisrICAgIGlmIChpbW9kZSA9PSA2KQorKwl7IAorKwlwcmludGYoIlVucmVjb2duaXplZCBtb2Rl OiAlc1xuIiwgYW1vZGUpOworKwlyZXR1cm4gLTE7CisrCX0KKysKKysgICAgbWVtY3B5KGtleVsw XSwgYUtleSwgbmtleXN6KTsKKysgICAgaWYgKGlWZWMpCisrCW1lbWNweShpdlswXSwgaVZlYywg QUVTX0JMT0NLX1NJWkUpOworKyAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwltZW1jcHkocHRl eHRbMF0sIHRleHQsIGxlbik7CisrICAgIGVsc2UKKysJbWVtY3B5KGN0ZXh0WzBdLCB0ZXh0LCBs ZW4pOworKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpCisrCXsKKysJLyogcHJpbnRmKCJJ dGVyYXRpb24gJWRcbiIsIGkpOyAqLworKwlpZiAoaSA+IDApCisrCSAgICB7CisrCSAgICBmcHJp bnRmKHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKKysJICAgIE91dHB1dFZhbHVlKCJLRVkiLGtleVtp XSxua2V5c3oscmZwLDApOworKwkgICAgaWYgKGltb2RlICE9IEVDQikgIC8qIEVDQiAqLworKwkJ T3V0cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tfU0laRSxyZnAsMCk7CisrCSAgICAvKiBP dXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLworKwkgICAgT3V0cHV0VmFsdWUodF90YWdb ZGlyXjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0sbGVuLHJmcCwKKysJCQlpbW9kZSA9PSBD RkIxKTsKKysJICAgIH0KKysJZm9yIChqID0gMDsgaiA8IDEwMDA7ICsraikKKysJICAgIHsKKysJ ICAgIHN3aXRjaCAoaW1vZGUpCisrCQl7CisrCSAgICBjYXNlIEVDQjoKKysJCWlmIChqID09IDAp CisrCQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAqLworKwkJICAgIHJldCA9IEFFU1Rlc3Qo JmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxMLCAKKysJCQkJICBkaXIsICAvKiAwID0g ZGVjcnlwdCwgMSA9IGVuY3J5cHQgKi8KKysJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7 CisrCQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3Rl eHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtq XSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0g WEVOQ1JZUFQpCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pd LCBsZW4pOworKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKKysJCQl9Cisr CQkgICAgZWxzZQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtq XSwgbGVuKTsKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7CisrCQkJfQor KwkJICAgIH0KKysJCWJyZWFrOworKworKwkgICAgY2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjog IAorKwkgICAgY2FzZSBDRkIxMjg6CisrCQlpZiAoaiA9PSAwKQorKwkJICAgIHsKKysJCSAgICBy ZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAorKwkJCQkg IGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBj dGV4dFtqXSwgbGVuKTsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCW1lbWNweShw dGV4dFtqKzFdLCBpdltpXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2or MV0sIGl2W2ldLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYg KGRpciA9PSBYRU5DUllQVCkKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwg cHRleHRbal0sIGxlbik7CisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMV0sIGxlbik7 CisrCQkJfQorKwkJICAgIGVsc2UKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtq XSwgY3RleHRbal0sIGxlbik7CisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMV0sIGxl bik7CisrCQkJfQorKwkJICAgIH0KKysJCWJyZWFrOworKworKwkgICAgY2FzZSBDRkI4OgorKwkJ aWYgKGogPT0gMCkKKysJCSAgICB7CisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwg YWtleXN6LCBrZXlbaV0sIGl2W2ldLCAKKysJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9 IGVuY3J5cHQgKi8KKysJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7CisrCQkgICAgfQor KwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCUVWUF9D aXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQlF VlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9CisrCQlp ZiAoZGlyID09IFhFTkNSWVBUKQorKwkJICAgIHsKKysJCSAgICBpZiAoaiA8IDE2KQorKwkJCW1l bWNweShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJCW1lbWNw eShwdGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkg ICAgeworKwkJICAgIGlmIChqIDwgMTYpCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sICZpdltpXVtq XSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMTZd LCBsZW4pOworKwkJICAgIH0KKysJCWJyZWFrOworKworKwkgICAgY2FzZSBDRkIxOgorKwkJaWYo aiA9PSAwKQorKwkJICAgIHsKKysjaWYgMAorKwkJICAgIC8qIGNvbXBlbnNhdGUgZm9yIHdyb25n IGVuZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLworKwkJICAgIGlmKGkgPT0gMCkKKysJCQlwdGV4 dFswXVswXTw8PTc7CisrI2VuZGlmCisrCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LGFtb2RlLGFr ZXlzeixrZXlbaV0saXZbaV0sZGlyLAorKwkJCQlwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Cisr CQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQor KwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOworKwkJICAgIGVs c2UKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysKKysJ CSAgICB9CisrCQlpZihkaXIgPT0gWEVOQ1JZUFQpCisrCQkgICAgeworKwkJICAgIGlmKGogPCAx MjgpCisrCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKKysJCSAgICBlbHNlCisrCQkJ c2IocHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSwwKSk7CisrCQkgICAgfQorKwkJZWxzZQor KwkJICAgIHsKKysJCSAgICBpZihqIDwgMTI4KQorKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihpdltp XSxqKSk7CisrCQkgICAgZWxzZQorKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihwdGV4dFtqLTEyOF0s MCkpOworKwkJICAgIH0KKysJCWJyZWFrOworKwkJfQorKwkgICAgfQorKwktLWo7IC8qIHJlc2V0 IHRvIGxhc3Qgb2YgcmFuZ2UgKi8KKysJLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQg Ki8KKysJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIgPyBjdGV4dFtqXSA6IHB0ZXh0W2pdLGxl bixyZnAsCisrCQkgICAgaW1vZGUgPT0gQ0ZCMSk7CisrCWZwcmludGYocmZwLCAiXG4iKTsgIC8q IGFkZCBzZXBhcmF0b3IgKi8KKysKKysJLyogQ29tcHV0ZSBuZXh0IEtFWSAqLworKwlpZiAoZGly ID09IFhFTkNSWVBUKQorKwkgICAgeworKwkgICAgaWYgKGltb2RlID09IENGQjgpCisrCQl7IC8q IGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCisrCQlmb3IgKG4x ID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCisrCQkgICAgY2lw aGVydGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKKysJCX0KKysJICAgIGVsc2UgaWYoaW1vZGUg PT0gQ0ZCMSkKKysJCXsKKysJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyAr K24xLC0tbjIpCisrCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Cisr CQl9CisrCSAgICBlbHNlCisrCQlzd2l0Y2ggKGFrZXlzeikKKysJCSAgICB7CisrCQljYXNlIDEy ODoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbal0sIDE2KTsKKysJCSAgICBicmVh azsKKysJCWNhc2UgMTkyOgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdKzgs IDgpOworKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIGN0ZXh0W2pdLCAxNik7CisrCQkgICAg YnJlYWs7CisrCQljYXNlIDI1NjoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0x XSwgMTYpOworKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBjdGV4dFtqXSwgMTYpOworKwkJ ICAgIGJyZWFrOworKwkJICAgIH0KKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgaWYg KGltb2RlID09IENGQjgpCisrCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4u IHx8IENUW2pdICovCisrCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7 ICsrbjEsIC0tbjIpCisrCQkgICAgY2lwaGVydGV4dFtuMV0gPSBwdGV4dFtqLW4yXVswXTsKKysJ CX0KKysJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKKysJCXsKKysJCWZvcihuMT0wLG4yPWFr ZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCisrCQkgICAgc2IoY2lwaGVydGV4dCxu MSxnYihwdGV4dFtqLW4yXSwwKSk7CisrCQl9CisrCSAgICBlbHNlCisrCQlzd2l0Y2ggKGFrZXlz eikKKysJCSAgICB7CisrCQljYXNlIDEyODoKKysJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRl eHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMTkyOgorKwkJICAgIG1lbWNweShj aXBoZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOworKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0Kzgs IHB0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIDI1NjoKKysJCSAgICBtZW1j cHkoY2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOworKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0 KzE2LCBwdGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJICAgIH0KKysJ LyogQ29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBLZXlbaV0geG9yIGN0ICovCisrCWZvciAo biA9IDA7IG4gPCBua2V5c3o7ICsrbikKKysJICAgIGtleVtpKzFdW25dID0ga2V5W2ldW25dIF4g Y2lwaGVydGV4dFtuXTsKKysJCisrCS8qIENvbXB1dGUgbmV4dCBJViBhbmQgdGV4dCAqLworKwlp ZiAoZGlyID09IFhFTkNSWVBUKQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsK KysJICAgIGNhc2UgRUNCOgorKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqXSwgQUVTX0JMT0NL X1NJWkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOgorKwkg ICAgY2FzZSBDRkIxMjg6CisrCQltZW1jcHkoaXZbaSsxXSwgY3RleHRbal0sIEFFU19CTE9DS19T SVpFKTsKKysJCW1lbWNweShwdGV4dFswXSwgY3RleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOwor KwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjg6CisrCQkvKiBJVltpKzFdID0gY3QgKi8KKysJCWZv ciAobjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQorKwkJICAgIGl2W2krMV1b bjFdID0gY3RleHRbai1uMl1bMF07CisrCQlwdGV4dFswXVswXSA9IGN0ZXh0W2otMTZdWzBdOwor KwkJYnJlYWs7CisrCSAgICBjYXNlIENGQjE6CisrCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEy OCA7ICsrbjEsLS1uMikKKysJCSAgICBzYihpdltpKzFdLG4xLGdiKGN0ZXh0W2otbjJdLDApKTsK KysJCXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYweDgwOworKwkJYnJlYWs7CisrCQl9Cisr CSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIHN3aXRjaCAoaW1vZGUpCisrCQl7CisrCSAg ICBjYXNlIEVDQjoKKysJCW1lbWNweShjdGV4dFswXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpF KTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDQkM6CisrCSAgICBjYXNlIE9GQjoKKysJICAgIGNh c2UgQ0ZCMTI4OgorKwkJbWVtY3B5KGl2W2krMV0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7 CisrCQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKKysJCWJy ZWFrOworKwkgICAgY2FzZSBDRkI4OgorKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7 ICsrbjEsIC0tbjIpCisrCQkgICAgaXZbaSsxXVtuMV0gPSBwdGV4dFtqLW4yXVswXTsKKysJCWN0 ZXh0WzBdWzBdID0gcHRleHRbai0xNl1bMF07CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCMToK KysJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGl2 W2krMV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOworKwkJY3RleHRbMF1bMF09cHRleHRbai0xMjhd WzBdJjB4ODA7CisrCQlicmVhazsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICAKKysgICAgcmV0 dXJuIHJldDsKKysgICAgfQorKworKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ki8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgICMg Q29uZmlnIGluZm8gZm9yIHYtb25lCisrICAjIEFFU1ZTIE1NVCB0ZXN0IGRhdGEgZm9yIEVDQgor KyAgIyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQKKysgICMgS2V5IExlbmd0aCA6IDI1Ngor KyAgIyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCisrICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KKysKKytpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKKysg ICAgeworKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKKysgICAgRklMRSAqYWZwID0gTlVM TCwgKnJmcCA9IE5VTEw7CisrICAgIGNoYXIgaWJ1ZlsyMDQ4XTsKKysgICAgY2hhciB0YnVmWzIw NDhdOworKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOworKyAgICBjaGFyIGFsZ29bOF0gPSAi IjsKKysgICAgY2hhciBhbW9kZVs4XSA9ICIiOworKyAgICBjaGFyIGF0ZXN0WzhdID0gIiI7Cisr ICAgIGludCBha2V5c3ogPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQw XTsKKysgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKKysgICAgdW5zaWduZWQg Y2hhciBwbGFpbnRleHRbMjA0OF07CisrICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4 XTsKKysgICAgY2hhciAqcnA7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJ UEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkK KysJeworKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAg IHN0cmNweShhZm4sIHJxZmlsZSk7CisrCisrICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIp KSA9PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAK KysJICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJcmV0dXJuIC0xOworKwl9CisrICAg IGlmICghcnNwZmlsZSkKKysJeworKwlzdHJjcHkocmZuLGFmbik7CisrCXJwPXN0cnN0cihyZm4s InJlcS8iKTsKKysjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysJaWYgKCFycCkKKysJICAgIHJw PXN0cnN0cihyZm4sInJlcVxcIik7CisrI2VuZGlmCisrCWFzc2VydChycCk7CisrCW1lbWNweShy cCwicnNwIiwzKTsKKysJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOworKwltZW1jcHkocnAsICIu cnNwIiwgNCk7CisrCXJzcGZpbGUgPSByZm47CisrCX0KKysgICAgaWYgKChyZnAgPSBmb3Blbihy c3BmaWxlLCAidyIpKSA9PSBOVUxMKQorKwl7CisrCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTog JXMsICVzXG4iLCAKKysJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKKysJZmNsb3NlKGFm cCk7CisrCWFmcCA9IE5VTEw7CisrCXJldHVybiAtMTsKKysJfQorKyAgICB3aGlsZSAoIWVyciAm JiAoZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQorKwl7CisrCXRpZHlf bGluZSh0YnVmLCBpYnVmKTsKKysJaWxlbiA9IHN0cmxlbihpYnVmKTsKKysJLyogICAgICBwcmlu dGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsgKi8KKysJc3dpdGNoIChzdGVwKQorKwkg ICAgeworKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCisrCSAgICBpZiAoaWJ1ZlswXSA9 PSAnXG4nKQorKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KKysJCWlmICgoKmFsZ28gPT0gJ1ww JykgfHwKKysJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8CisrCQkgICAgKGFrZXlzeiA9PSAwKSkK KysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJNaXNzaW5nIEFsZ29yaXRobSwgTW9kZSBvciBLZXlT aXplICglcy8lcy8lZClcbiIsCisrCQkJICAgYWxnbyxhbW9kZSxha2V5c3opOworKwkJICAgIGVy ciA9IDE7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBmcHV0cyhpYnVmLCBy ZnApOworKwkJICAgICsrIHN0ZXA7CisrCQkgICAgfQorKwkJfQorKwkgICAgZWxzZSBpZiAoaWJ1 ZlswXSAhPSAnIycpCisrCQl7CisrCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNc biIsIGlidWYpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsgLyogcHJvY2Vz cyBwcmVhbWJsZSAqLworKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKKysJCWludCBuOworKwkJ aWYgKGFrZXlzeikKKysJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCisr CQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOworKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIs IGN0aW1lKCZydGltKSk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBmcHV0 cyhpYnVmLCByZnApOworKwkJICAgIGlmIChzdHJuY21wKHBwLCAiQUVTVlMgIiwgNikgPT0gMCkK KysJCQl7CisrCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsKKysJCQkvKiBnZXQgdGVzdCB0eXBlICov CisrCQkJcHAgKz0gNjsKKysJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKKysJCQluID0geHAtcHA7 CisrCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOworKwkJCWF0ZXN0W25dID0gJ1wwJzsKKysJCQkv KiBnZXQgbW9kZSAqLworKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICov CisrCQkJbiA9IHN0cmxlbih4cCsxKS0xOworKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwor KwkJCWFtb2RlW25dID0gJ1wwJzsKKysJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCisrCQkJaWYg KFZFUkJPU0UpCisrCQkJCXByaW50ZigiVGVzdCA9ICVzLCBNb2RlID0gJXNcbiIsIGF0ZXN0LCBh bW9kZSk7CisrCQkJfQorKwkJICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKHBwLCAiS2V5IExlbmd0 aCA6ICIsIDEzKSA9PSAwKQorKwkJCXsKKysJCQlha2V5c3ogPSBhdG9pKHBwKzEzKTsKKysJCQlp ZiAoVkVSQk9TRSkKKysJCQkJcHJpbnRmKCJLZXkgc2l6ZSA9ICVkXG4iLCBha2V5c3opOworKwkJ CX0KKysJCSAgICB9CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSAxOiAgLyogW0VOQ1JZ UFRdIHwgW0RFQ1JZUFRdICovCisrCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCisrCQl7CisrCQlm cHV0cyhpYnVmLCByZnApOworKwkJKytzdGVwOworKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJb RU5DUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDE7CisrCQllbHNlIGlmIChzdHJuY2Fz ZWNtcChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKKysJCSAgICBkaXIgPSAwOworKwkJZWxz ZQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYp OworKwkJICAgIGVyciA9IDE7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNl IGlmIChkaXIgPT0gLTEpCisrCQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIEVO Q1JZUFQvREVDUllQVCBrZXl3b3JkXG4iKTsKKysJCWJyZWFrOworKwkJfQorKwkgICAgZWxzZSAK KysJCXN0ZXAgPSAyOworKworKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KKysJICAgIGZwdXRz KGlidWYsIHJmcCk7CisrCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQorKwkJYnJlYWs7CisrCSAgICBp Zighc3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQorKwkJYnJlYWs7CisrCisrCSAgICBp ZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYpICE9IDApCisrCQl7CisrCQlwcmludGYo Ik1pc3NpbmcgS0VZXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7Cisr CQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOworKwkJaWYgKGxlbiA8IDApCisr CQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOworKwkJICAgIGVyciA9MTsK KysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4p OworKwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09IDApCisrCQkgICAgeworKwkJICAgIG1l bXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOworKwkJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsg IC8qIG5vIGl2ZWMgZm9yIEVDQiAqLworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICArK3N0ZXA7 CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KKysJICAg IGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwg NSkgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBJVlxuIik7CisrCQllcnIgPSAxOwor KwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBp VmVjKTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQg SVZcbiIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlQcmlu dFZhbHVlKCJJViIsIGlWZWMsIGxlbik7CisrCQlzdGVwID0gKGRpcik/IDQ6IDU7CisrCQl9Cisr CSAgICBicmVhazsKKysKKysJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCisrCSAgICBm cHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQg PSAiLCAxMikgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwor KwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWludCBubiA9IHN0cmxlbihp YnVmKzEyKTsKKysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJi aW4oaWJ1ZisxMixubi0xLHBsYWludGV4dCk7CisrCQllbHNlCisrCQkgICAgbGVuPWhleDJiaW4o aWJ1ZisxMiwgcGxhaW50ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBw cmludGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOworKwkJICAgIGVyciA9MTsK KysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQp KQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7CisrCQkgICAg fQorKwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwg bGVuKTsKKysJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8g VGVzdCAqLworKwkJICAgIHsKKysJCSAgICBpZihkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwg aVZlYywgCisrCQkJICAgICAgZGlyLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4sIAor KwkJCSAgICAgIHJmcCkgPCAwKQorKwkJCUVYSVQoMSk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJ ICAgIHsKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlW ZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkg IHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVS VEVYVCIsY2lwaGVydGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwor KwkJICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNTog LyogQ0lQSEVSVEVYVCA9IHh4eHggKi8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBp ZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKKysJCXsKKysJ CXByaW50ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UK KysJCXsKKysJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4o aWJ1ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKKysJCWVsc2UKKysJCSAgICBs ZW4gPSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAg ICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOworKwkJICAgIGVyciA9 MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCisrCQlQcmludFZhbHVlKCJDSVBIRVJURVhU IiwgY2lwaGVydGV4dCwgbGVuKTsKKysJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAg LyogTW9udGUgQ2FybG8gVGVzdCAqLworKwkJICAgIHsKKysJCSAgICBkb19tY3QoYW1vZGUsIGFr ZXlzeiwgYUtleSwgaVZlYywgCisrCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Cisr CQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFt b2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAx ID0gZW5jcnlwdCAqLworKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKKysJCSAg ICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4s cmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2 OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNjoKKysJICAgIGlmIChpYnVmWzBdICE9 ICdcbicpCisrCQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3Jc biIpOworKwkJfQorKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKKysJ CXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KKysJCWZwdXRzKGlidWYs IHJmcCk7CisrCQl9CisrCSAgICBzdGVwID0gMTsKKysJICAgIGJyZWFrOworKwkgICAgfQorKwl9 CisrICAgIGlmIChyZnApCisrCWZjbG9zZShyZnApOworKyAgICBpZiAoYWZwKQorKwlmY2xvc2Uo YWZwKTsKKysgICAgcmV0dXJuIGVycjsKKysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIFByb2Nlc3NlcyBlaXRoZXIgYSBz aW5nbGUgZmlsZSBvciAKKysgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQg aW4gYSBmaWxlLgorKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6CisrICAgIGFlc190 ZXN0IC1mIHh4eC5yZXEKKysgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKKysgICAg YWVzX3Rlc3QgLWQgeHh4eHgueHh4CisrICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAorKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKytpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgY2hhciAqcnFsaXN0ID0g InJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7CisrICAgIEZJTEUgKmZwID0gTlVMTDsKKysgICAg Y2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7CisrICAgIGludCBmX29wdCA9IDAsIGRf b3B0ID0gMTsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmKCFGSVBTX21vZGVfc2V0 KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlFWElUKDEpOworKwl9CisrI2VuZGlm CisrICAgIGlmIChhcmdjID4gMSkKKysJeworKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQi KSA9PSAwKQorKwkgICAgeworKwkgICAgZF9vcHQgPSAxOworKwkgICAgfQorKwllbHNlIGlmIChz dHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCisrCSAgICB7CisrCSAgICBmX29wdCA9IDE7 CisrCSAgICBkX29wdCA9IDA7CisrCSAgICB9CisrCWVsc2UKKysJICAgIHsKKysJICAgIHByaW50 ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKKysJICAgIHJldHVybiAwOwor KwkgICAgfQorKwlpZiAoYXJnYyA8IDMpCisrCSAgICB7CisrCSAgICBwcmludGYoIk1pc3Npbmcg cGFyYW1ldGVyXG4iKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoZF9vcHQpCisr CSAgICBycWxpc3QgPSBhcmd2WzJdOworKwllbHNlCisrCSAgICB7CisrCSAgICBzdHJjcHkoZm4s IGFyZ3ZbMl0pOworKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107CisrCSAgICB9CisrCX0KKysgICAg aWYgKGRfb3B0KQorKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KKysJaWYgKCEo ZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCJDYW5ub3Qg b3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKKysJICAgIHJldHVybiAtMTsKKysJICAgIH0KKysJd2hp bGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCisrCSAgICB7CisrCSAgICBzdHJ0b2soZm4s ICJcclxuIik7CisrCSAgICBzdHJjcHkocmZuLCBmbik7CisrCSAgICBpZiAoVkVSQk9TRSkKKysJ CXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7CisrCSAgICBpZiAocHJvY19maWxlKHJm biwgcnNwZmlsZSkpCisrCQl7CisrCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6 ICVzIDw8PFxuIiwgcmZuKTsKKysJCUVYSVQoMSk7CisrCQl9CisrCSAgICB9CisrCWZjbG9zZShm cCk7CisrCX0KKysgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLworKwl7CisrCWlmIChWRVJCT1NF KQorKwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOworKwlpZiAocHJvY19maWxl KGZuLCByc3BmaWxlKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFp bGVkIGZvcjogJXMgPDw8XG4iLCBmbik7CisrCSAgICB9CisrCX0KKysgICAgRVhJVCgwKTsKKysg ICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX2Rlc21vdnMuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX2Rlc21vdnMuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCTIw MTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcwMiBAQAorKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBv cGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu CisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KKysgKgorKyAqLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisrICBOSVNUIERFUyBNb2RlcyBvZiBPcGVyYXRpb24gVmFsaWRhdGlv biBTeXN0ZW0KKysgIFRlc3QgUHJvZ3JhbQorKworKyAgQmFzZWQgb24gdGhlIEFFUyBWYWxpZGF0 aW9uIFN1aXRlLCB3aGljaCB3YXM6CisrICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6CisrICBWLU9O RSBDb3Jwb3JhdGlvbgorKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKKysgIEdlcm1h bnRvd24sIE1EIDIwODc0CisrICBVLlMuQS4KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRl IDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+Cisr I2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Rlcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2JuLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgImVfb3MuaCIK KysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICph cmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgREVTIHN1cHBvcnRcbiIpOworKyAgICBy ZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKyNkZWZpbmUgREVTX0JMT0NLX1NJWkUgOAorKwor KyNkZWZpbmUgVkVSQk9TRSAwCisrCisraW50IERFU1Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0eCwK KysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LCAKKysJ ICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8qIDAgPSBkZWNyeXB0 LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBjaGFy ICppbiwgaW50IGxlbikKKysgICAgeworKyAgICBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIgPSBO VUxMOworKworKyAgICBpZiAoYWtleXN6ICE9IDE5MikKKysJeworKwlwcmludGYoIkludmFsaWQg a2V5IHNpemU6ICVkXG4iLCBha2V5c3opOworKwlFWElUKDEpOworKwl9CisrCisrICAgIGlmIChz dHJjYXNlY21wKGFtb2RlLCAiQ0JDIikgPT0gMCkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2Ni YygpOworKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJY2lw aGVyID0gRVZQX2Rlc19lZGUzX2VjYigpOworKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2Rl LCAiQ0ZCNjQiKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiNjQoKTsKKysgICAg ZWxzZSBpZiAoc3RybmNhc2VjbXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQorKwljaXBoZXIgPSBF VlBfZGVzX2VkZTNfb2ZiKCk7CisrICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgi KSkKKysJY2lwaGVyID0gRVZQX2Rlc19lZGUzX2NmYjgoKTsKKysgICAgZWxzZSBpZighc3RyY2Fz ZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiMSgpOworKyAg ICBlbHNlCisrCXsKKysJcHJpbnRmKCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCUVY SVQoMSk7CisrCX0KKysKKysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBO VUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCisrCXJldHVybiAwOworKyAgICBpZighc3RyY2Fz ZWNtcChhbW9kZSwiQ0ZCMSIpKQorKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgsIEVW UF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOworKyAgICBFVlBfQ2lwaGVyKGN0eCwgb3V0LCBpbiwg bGVuKTsKKysKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKyt2b2lkIERlYnVnVmFsdWUoY2hh ciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCisrICAgIHsKKysgICAgY2hhciBv YnVmWzIwNDhdOworKyAgICBpbnQgb2xlbjsKKysgICAgb2xlbiA9IGJpbjJoZXgodmFsLCBsZW4s IG9idWYpOworKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKKysg ICAgfQorKworK3ZvaWQgc2hpZnRpbih1bnNpZ25lZCBjaGFyICpkc3QsdW5zaWduZWQgY2hhciAq c3JjLGludCBuYml0cykKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAgLyogbW92ZSB0aGUg Ynl0ZXMuLi4gKi8KKysgICAgbWVtbW92ZShkc3QsZHN0K25iaXRzLzgsMyo4LW5iaXRzLzgpOwor KyAgICAvKiBhcHBlbmQgbmV3IGRhdGEgKi8KKysgICAgbWVtY3B5KGRzdCszKjgtbmJpdHMvOCxz cmMsKG5iaXRzKzcpLzgpOworKyAgICAvKiBsZWZ0IHNoaWZ0IHRoZSBiaXRzICovCisrICAgIGlm KG5iaXRzJTgpCisrCWZvcihuPTAgOyBuIDwgMyo4IDsgKytuKQorKwkgICAgZHN0W25dPShkc3Rb bl0gPDwgKG5iaXRzJTgpKXwoZHN0W24rMV0gPj4gKDgtbmJpdHMlOCkpOworKyAgICB9CQorKwor Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2No YXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9OworK2NoYXIgKnRfbW9k ZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkI2NCJ9OworK2VudW0g TW9kZSB7Q0JDLCBFQ0IsIE9GQiwgQ0ZCMSwgQ0ZCOCwgQ0ZCNjR9OworK2ludCBTaXplc1s2XT17 NjQsNjQsNjQsMSw4LDY0fTsKKysKKyt2b2lkIGRvX21jdChjaGFyICphbW9kZSwgCisrCSAgICBp bnQgYWtleXN6LCBpbnQgbnVta2V5cywgdW5zaWduZWQgY2hhciAqYWtleSx1bnNpZ25lZCBjaGFy ICppdmVjLAorKwkgICAgaW50IGRpciwgdW5zaWduZWQgY2hhciAqdGV4dCwgaW50IGxlbiwKKysJ ICAgIEZJTEUgKnJmcCkKKysgICAgeworKyAgICBpbnQgaSxpbW9kZTsKKysgICAgdW5zaWduZWQg Y2hhciBua1s0KjhdOyAvKiBsb25nZXN0IGtleSs4ICovCisrICAgIHVuc2lnbmVkIGNoYXIgdGV4 dDBbOF07CisrCisrICAgIGZvciAoaW1vZGU9MCA7IGltb2RlIDwgNiA7ICsraW1vZGUpCisrCWlm KCFzdHJjbXAoYW1vZGUsdF9tb2RlW2ltb2RlXSkpCisrCSAgICBicmVhazsKKysgICAgaWYgKGlt b2RlID09IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNvZ25pemVkIG1vZGU6ICVzXG4iLCBhbW9k ZSk7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgZm9yKGk9MCA7IGkgPCA0MDAgOyArK2kpCisr CXsKKysJaW50IGo7CisrCWludCBuOworKwlpbnQga3A9YWtleXN6LzY0OworKwl1bnNpZ25lZCBj aGFyIG9sZF9pdls4XTsKKysJRVZQX0NJUEhFUl9DVFggY3R4OworKwlFVlBfQ0lQSEVSX0NUWF9p bml0KCZjdHgpOworKworKwlmcHJpbnRmKHJmcCwiXG5DT1VOVCA9ICVkXG4iLGkpOworKwlpZihr cCA9PSAxKQorKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsYWtleSw4LHJmcCwwKTsKKysJZWxzZQor KwkgICAgZm9yKG49MCA7IG4gPCBrcCA7ICsrbikKKysJCXsKKysJCWZwcmludGYocmZwLCJLRVkl ZCIsbisxKTsKKysJCU91dHB1dFZhbHVlKCIiLGFrZXkrbio4LDgscmZwLDApOworKwkJfQorKwor KwlpZihpbW9kZSAhPSBFQ0IpCisrCSAgICBPdXRwdXRWYWx1ZSgiSVYiLGl2ZWMsOCxyZnAsMCk7 CisrCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl4xXSx0ZXh0LGxlbixyZnAsaW1vZGUgPT0gQ0ZCMSk7 CisrI2lmIDAKKysJLyogY29tcGVuc2F0ZSBmb3IgZW5kaWFubmVzcyAqLworKwlpZihpbW9kZSA9 PSBDRkIxKQorKwkgICAgdGV4dFswXTw8PTc7CisrI2VuZGlmCisrCW1lbWNweSh0ZXh0MCx0ZXh0 LDgpOworKworKwlmb3Ioaj0wIDsgaiA8IDEwMDAwIDsgKytqKQorKwkgICAgeworKwkgICAgdW5z aWduZWQgY2hhciBvbGRfdGV4dFs4XTsKKysKKysJICAgIG1lbWNweShvbGRfdGV4dCx0ZXh0LDgp OworKwkgICAgaWYoaiA9PSAwKQorKwkJeworKwkJbWVtY3B5KG9sZF9pdixpdmVjLDgpOworKwkJ REVTVGVzdCgmY3R4LGFtb2RlLGFrZXlzeixha2V5LGl2ZWMsZGlyLHRleHQsdGV4dCxsZW4pOwor KwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJbWVtY3B5KG9sZF9pdixjdHguaXYsOCk7CisrCQlF VlBfQ2lwaGVyKCZjdHgsdGV4dCx0ZXh0LGxlbik7CisrCQl9CisrCSAgICBpZihqID09IDk5OTkp CisrCQl7CisrCQlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBD RkIxKTsKKysJCS8qCQltZW1jcHkoaXZlYyx0ZXh0LDgpOyAqLworKwkJfQorKwkgICAgLyoJICAg IERlYnVnVmFsdWUoIml2IixjdHguaXYsOCk7ICovCisrCSAgICAvKiBhY2N1bXVsYXRlIG1hdGVy aWFsIGZvciB0aGUgbmV4dCBrZXkgKi8KKysJICAgIHNoaWZ0aW4obmssdGV4dCxTaXplc1tpbW9k ZV0pOworKwkgICAgLyoJICAgIERlYnVnVmFsdWUoIm5rIixuaywyNCk7Ki8KKysJICAgIGlmKChk aXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0gQ0ZCOCB8fCBpbW9kZSA9PSBDRkI2NAor KwkJCXx8IGltb2RlID09IENCQykpIHx8IGltb2RlID09IE9GQikKKysJCW1lbWNweSh0ZXh0LG9s ZF9pdiw4KTsKKysKKysJICAgIGlmKCFkaXIgJiYgKGltb2RlID09IENGQjEgfHwgaW1vZGUgPT0g Q0ZCOCB8fCBpbW9kZSA9PSBDRkI2NCkpCisrCQl7CisrCQkvKiB0aGUgdGVzdCBzcGVjaWZpZXMg dXNpbmcgdGhlIG91dHB1dCBvZiB0aGUgcmF3IERFUyBvcGVyYXRpb24KKysJCSAgIHdoaWNoIHdl IGRvbid0IGhhdmUsIHNvIHJlY29uc3RydWN0IGl0Li4uICovCisrCQlmb3Iobj0wIDsgbiA8IDgg OyArK24pCisrCQkgICAgdGV4dFtuXV49b2xkX3RleHRbbl07CisrCQl9CisrCSAgICB9CisrCWZv cihuPTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlbbl1ePW5rWzE2K25dOworKwlmb3Iobj0w IDsgbiA8IDggOyArK24pCisrCSAgICBha2V5Wzgrbl1ePW5rWzgrbl07CisrCWZvcihuPTAgOyBu IDwgOCA7ICsrbikKKysJICAgIGFrZXlbMTYrbl1ePW5rW25dOworKwlpZihudW1rZXlzIDwgMykK KysJICAgIG1lbWNweSgmYWtleVsyKjhdLGFrZXksOCk7CisrCWlmKG51bWtleXMgPCAyKQorKwkg ICAgbWVtY3B5KCZha2V5WzhdLGFrZXksOCk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2Ni bG9jayAqKWFrZXkpOworKwlERVNfc2V0X29kZF9wYXJpdHkoKERFU19jYmxvY2sgKikoYWtleSs4 KSk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzE2KSk7CisrCW1l bWNweShpdmVjLGN0eC5pdiw4KTsKKysKKysJLyogcG9pbnRsZXNzIGV4ZXJjaXNlIC0gdGhlIGZp bmFsIHRleHQgZG9lc24ndCBkZXBlbmQgb24gdGhlCisrCSAgIGluaXRpYWwgdGV4dCBpbiBPRkIg bW9kZSwgc28gd2hvIGNhcmVzIHdoYXQgaXQgaXM/IChXaG8KKysJICAgZGVzaWduZWQgdGhlc2Ug dGVzdHM/KSAqLworKwlpZihpbW9kZSA9PSBPRkIpCisrCSAgICBmb3Iobj0wIDsgbiA8IDggOyAr K24pCisrCQl0ZXh0W25dPXRleHQwW25dXm9sZF9pdltuXTsKKysJfQorKyAgICB9CisrICAgIAor K2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQorKyAgICB7CisrICAg IGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOworKyAgICBGSUxFICphZnAgPSBOVUxMLCAqcmZwID0g TlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhdLCB0YnVmWzIwNDhdOworKyAgICBpbnQgaWxlbiwg bGVuLCByZXQgPSAwOworKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3Rb MTAwXSA9ICIiOworKyAgICBpbnQgYWtleXN6PTA7CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1sy MF0sIGFLZXlbNDBdOworKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAg ICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBo ZXJ0ZXh0WzIwNDhdOworKyAgICBjaGFyICpycDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4Owor KyAgICBpbnQgbnVta2V5cz0xOworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwor KyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUpKQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZp bGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysK KysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJyIikpID09IE5VTEwpCisrCXsKKysJcHJpbnRm KCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihl cnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysgICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0 cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJmbiwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NM X1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAgcnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysj ZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0 cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwgIi5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJm bjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVuKHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisr CXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZu LCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2UoYWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0 dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJyICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1 ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlkeV9saW5lKHRidWYsIGlidWYpOworKwlpbGVu ID0gc3RybGVuKGlidWYpOworKwkvKglwcmludGYoInN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVm KTsqLworKwlpZihzdGVwID09IDMgJiYgIXN0cmNtcChhbW9kZSwiRUNCIikpCisrCSAgICB7Cisr CSAgICBtZW1zZXQoaVZlYywgMCwgc2l6ZW9mKGlWZWMpKTsKKysJICAgIHN0ZXAgPSAoZGlyKT8g NDogNTsgIC8qIG5vIGl2ZWMgZm9yIEVDQiAqLworKwkgICAgfQorKwlzd2l0Y2ggKHN0ZXApCisr CSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBd ID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCphbW9kZSA9PSAn XDAnKQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIk1pc3NpbmcgTW9kZVxuIik7CisrCQkgICAg ZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYs IHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChp YnVmWzBdICE9ICcjJykKKysJCXsKKysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAl c1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9j ZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47Cisr CQlpZigqYW1vZGUpCisrCQkgICAgeyAvKiBpbnNlcnQgY3VycmVudCB0aW1lICYgZGF0ZSAqLwor KwkJICAgIHRpbWVfdCBydGltID0gdGltZSgwKTsKKysJCSAgICBmcHJpbnRmKHJmcCwgIiMgJXMi LCBjdGltZSgmcnRpbSkpOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJCSAgICBpZighc3RybmNtcChwcCwiSU5WRVJTRSAiLDgpIHx8ICFz dHJuY21wKHBwLCJERVMgIiw0KQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJUREVTICIsNSkK KysJCSAgICAgICB8fCAhc3RybmNtcChwcCwiUEVSTVVUQVRJT04gIiwxMikKKysJCSAgICAgICB8 fCAhc3RybmNtcChwcCwiU1VCU1RJVFVUSU9OICIsMTMpCisrCQkgICAgICAgfHwgIXN0cm5jbXAo cHAsIlZBUklBQkxFICIsOSkpCisrCQkJeworKwkJCS8qIGdldCB0ZXN0IHR5cGUgKi8KKysJCQlp Zighc3RybmNtcChwcCwiREVTICIsNCkpCisrCQkJICAgIHBwKz00OworKwkJCWVsc2UgaWYoIXN0 cm5jbXAocHAsIlRERVMgIiw1KSkKKysJCQkgICAgcHArPTU7CisrCQkJeHAgPSBzdHJjaHIocHAs ICcgJyk7CisrCQkJbiA9IHhwLXBwOworKwkJCXN0cm5jcHkoYXRlc3QsIHBwLCBuKTsKKysJCQlh dGVzdFtuXSA9ICdcMCc7CisrCQkJLyogZ2V0IG1vZGUgKi8KKysJCQl4cCA9IHN0cnJjaHIocHAs ICcgJyk7IC8qIGdldCBtb2RlIiAqLworKwkJCW4gPSBzdHJsZW4oeHArMSktMTsKKysJCQlzdHJu Y3B5KGFtb2RlLCB4cCsxLCBuKTsKKysJCQlhbW9kZVtuXSA9ICdcMCc7CisrCQkJLyogYW1vZGVb M10gPSAnXDAnOyAqLworKwkJCWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIlRlc3Q9JXMsIE1v ZGU9JXNcbiIsYXRlc3QsYW1vZGUpOworKwkJCX0KKysJCSAgICB9CisrCQl9CisrCSAgICBicmVh azsKKysKKysJY2FzZSAxOiAgLyogW0VOQ1JZUFRdIHwgW0RFQ1JZUFRdICovCisrCSAgICBpZihp YnVmWzBdID09ICdcbicpCisrCQlicmVhazsKKysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJ CXsKKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAo aWJ1ZiwgIltFTkNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYg KHN0cm5jYXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7 CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xu IiwgaWJ1Zik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJ ICAgIGVsc2UgaWYgKGRpciA9PSAtMSkKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1p c3NpbmcgRU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAg ICBlbHNlIAorKwkJc3RlcCA9IDI7CisrCisrCWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkg ICAgaWYoKmlidWYgPT0gJ1xuJykKKysJCXsKKysJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwor KwkJYnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVm LCJDT1VOVCA9ICIsOCkpCisrCQl7CisrCSAgICAgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCWJy ZWFrOworKyAgICAgICAgICAgICAgICB9CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1ZiwiQ09V TlQ9Iiw2KSkKKysJCXsKKysJICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJYnJlYWs7Cisr ICAgICAgICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJOdW1LZXlzID0g IiwxMCkpCisrCQl7CisrCQludW1rZXlzPWF0b2koaWJ1ZisxMCk7CisrCQlicmVhazsKKysJCX0K KysJICAKKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZighc3RybmNhc2VjbXAoaWJ1 ZiwiS0VZID0gIiw2KSkKKysJCXsKKysJCWFrZXlzej02NDsKKysJCWxlbiA9IGhleDJiaW4oKGNo YXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJp bnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyPTE7CisrCQkgICAgYnJlYWs7CisrCQkg ICAgfQorKwkJUHJpbnRWYWx1ZSgiS0VZIiwgYUtleSwgbGVuKTsKKysJCSsrc3RlcDsKKysJCX0K KysJICAgIGVsc2UgaWYoIXN0cm5jYXNlY21wKGlidWYsIktFWXMgPSAiLDcpKQorKwkJeworKwkJ YWtleXN6PTY0KjM7CisrCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleSk7CisrCQlpZihsZW4gIT0g OCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJy PTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJbWVtY3B5KGFLZXkrOCxhS2V5LDgpOwor KwkJbWVtY3B5KGFLZXkrMTYsYUtleSw4KTsKKysJCWlidWZbNF09J1wwJzsKKysJCVByaW50VmFs dWUoIktFWXMiLGFLZXksbGVuKTsKKysJCSsrc3RlcDsKKysJCX0KKysJICAgIGVsc2UgaWYoIXN0 cm5jYXNlY21wKGlidWYsIktFWSIsMykpCisrCQl7CisrCQlpbnQgbj1pYnVmWzNdLScxJzsKKysK KysJCWFrZXlzej02NCozOworKwkJbGVuPWhleDJiaW4oaWJ1Zis3LGFLZXkrbio4KTsKKysJCWlm KGxlbiAhPSA4KQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJ CSAgICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQlpYnVmWzRdPSdcMCc7Cisr CQlQcmludFZhbHVlKGlidWYsYUtleSxsZW4pOworKwkJaWYobiA9PSAyKQorKwkJICAgICsrc3Rl cDsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlcbiIpOwor KwkJZXJyID0gMTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDM6IC8qIElWID0geHh4 eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiSVYgPSAiLCA1KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJ CWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFy KilpYnVmKzUsIGlWZWMpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50 ZigiSW52YWxpZCBJVlxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAg IH0KKysJCVByaW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDog NTsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHgg Ki8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1Ziwg IlBMQUlOVEVYVCA9ICIsIDEyKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlO VEVYVFxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaW50IG5u ID0gc3RybGVuKGlidWYrMTIpOworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAg IGxlbj1iaW50MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBs ZW49aGV4MmJpbihpYnVmKzEyLCBwbGFpbnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAg eworKwkJICAgIHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkg ICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9m KHBsYWludGV4dCkpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4i KTsKKysJCSAgICB9CisrCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciop cGxhaW50ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8q IE1vbnRlIENhcmxvIFRlc3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLGFrZXlz eixudW1rZXlzLGFLZXksaVZlYyxkaXIscGxhaW50ZXh0LGxlbixyZnApOworKwkJICAgIH0KKysJ CWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNzZXJ0KGRpciA9PSAxKTsKKysJCSAgICByZXQgPSBE RVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwgIC8q IDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIGNpcGhlcnRleHQsIHBsYWludGV4 dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVYVCIsY2lwaGVydGV4dCxsZW4s cmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJICAgIH0KKysJCXN0ZXAgPSA2 OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNTogLyogQ0lQSEVSVEVYVCA9IHh4eHgg Ki8KKysJICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1Ziwg IkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKKysJCXsKKysJCXByaW50ZigiTWlzc2luZyBLRVlc biIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWlmKCFzdHJjbXAo YW1vZGUsIkNGQjEiKSkKKysJCSAgICBsZW49YmludDJiaW4oaWJ1ZisxMyxzdHJsZW4oaWJ1Zisx MyktMSxjaXBoZXJ0ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW4gPSBoZXgyYmluKGlidWYrMTMs Y2lwaGVydGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJ bnZhbGlkIENJUEhFUlRFWFRcbiIpOworKwkJICAgIGVyciA9MTsKKysJCSAgICBicmVhazsKKysJ CSAgICB9CisrCQkKKysJCVByaW50VmFsdWUoIkNJUEhFUlRFWFQiLCBjaXBoZXJ0ZXh0LCBsZW4p OworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1vbnRlIikgPT0gMCkgIC8qIE1vbnRlIENhcmxvIFRl c3QgKi8KKysJCSAgICB7CisrCQkgICAgZG9fbWN0KGFtb2RlLCBha2V5c3osIG51bWtleXMsIGFL ZXksIGlWZWMsIAorKwkJCSAgIGRpciwgY2lwaGVydGV4dCwgbGVuLCByZnApOworKwkJICAgIH0K KysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgYXNzZXJ0KGRpciA9PSAwKTsKKysJCSAgICByZXQg PSBERVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMsIAorKwkJCQkgIGRpciwg IC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHBsYWludGV4dCwgY2lwaGVy dGV4dCwgbGVuKTsKKysJCSAgICBPdXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hh ciAqKXBsYWludGV4dCxsZW4scmZwLAorKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOworKwkJ ICAgIH0KKysJCXN0ZXAgPSA2OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNjoKKysJ ICAgIGlmIChpYnVmWzBdICE9ICdcbicpCisrCQl7CisrCQllcnIgPSAxOworKwkJcHJpbnRmKCJN aXNzaW5nIHRlcm1pbmF0b3JcbiIpOworKwkJfQorKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0 LCAiTUNUIikgIT0gMCkKKysJCXsgLyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwg Ki8KKysJCWZwdXRzKGlidWYsIHJmcCk7CisrCQl9CisrCSAgICBzdGVwID0gMTsKKysJICAgIGJy ZWFrOworKwkgICAgfQorKwl9CisrICAgIGlmIChyZnApCisrCWZjbG9zZShyZnApOworKyAgICBp ZiAoYWZwKQorKwlmY2xvc2UoYWZwKTsKKysgICAgcmV0dXJuIGVycjsKKysgICAgfQorKworKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIFBy b2Nlc3NlcyBlaXRoZXIgYSBzaW5nbGUgZmlsZSBvciAKKysgIGEgc2V0IG9mIGZpbGVzIHdob3Nl IG5hbWVzIGFyZSBwYXNzZWQgaW4gYSBmaWxlLgorKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZp ZWQgYXM6CisrICAgIGFlc190ZXN0IC1mIHh4eC5yZXEKKysgIEEgc2V0IG9mIGZpbGVzIGlzIHNw ZWNpZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWQgeHh4eHgueHh4CisrICBUaGUgZGVmYXVsdCBp czogLWQgcmVxLnR4dAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrICAgIHsKKysg ICAgY2hhciAqcnFsaXN0ID0gInJlcS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7CisrICAgIEZJTEUg KmZwID0gTlVMTDsKKysgICAgY2hhciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7CisrICAg IGludCBmX29wdCA9IDAsIGRfb3B0ID0gMTsKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAg IGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKwlFWElU KDEpOworKwl9CisrI2VuZGlmCisrICAgIGlmIChhcmdjID4gMSkKKysJeworKwlpZiAoc3RyY2Fz ZWNtcChhcmd2WzFdLCAiLWQiKSA9PSAwKQorKwkgICAgeworKwkgICAgZF9vcHQgPSAxOworKwkg ICAgfQorKwllbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCisrCSAgICB7 CisrCSAgICBmX29wdCA9IDE7CisrCSAgICBkX29wdCA9IDA7CisrCSAgICB9CisrCWVsc2UKKysJ ICAgIHsKKysJICAgIHByaW50ZigiSW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsK KysJICAgIHJldHVybiAwOworKwkgICAgfQorKwlpZiAoYXJnYyA8IDMpCisrCSAgICB7CisrCSAg ICBwcmludGYoIk1pc3NpbmcgcGFyYW1ldGVyXG4iKTsKKysJICAgIHJldHVybiAwOworKwkgICAg fQorKwlpZiAoZF9vcHQpCisrCSAgICBycWxpc3QgPSBhcmd2WzJdOworKwllbHNlCisrCSAgICB7 CisrCSAgICBzdHJjcHkoZm4sIGFyZ3ZbMl0pOworKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Cisr CSAgICB9CisrCX0KKysgICAgaWYgKGRfb3B0KQorKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVj dG9yeSkgKi8KKysJaWYgKCEoZnAgPSBmb3BlbihycWxpc3QsICJyIikpKQorKwkgICAgeworKwkg ICAgcHJpbnRmKCJDYW5ub3Qgb3BlbiByZXEgbGlzdCBmaWxlXG4iKTsKKysJICAgIHJldHVybiAt MTsKKysJICAgIH0KKysJd2hpbGUgKGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCisrCSAgICB7 CisrCSAgICBzdHJ0b2soZm4sICJcclxuIik7CisrCSAgICBzdHJjcHkocmZuLCBmbik7CisrCSAg ICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCByZm4pOworKwkgICAgaWYgKHByb2NfZmlsZShy Zm4sIHJzcGZpbGUpKQorKwkJeworKwkJcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBmYWlsZWQgZm9y OiAlcyA8PDxcbiIsIHJmbik7CisrCQlFWElUKDEpOworKwkJfQorKwkgICAgfQorKwlmY2xvc2Uo ZnApOworKwl9CisrICAgIGVsc2UgLyogc2luZ2xlIGZpbGUgKi8KKysJeworKwlpZiAoVkVSQk9T RSkKKysJCXByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIGZuKTsKKysJaWYgKHByb2NfZmlsZShm biwgcnNwZmlsZSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxl ZCBmb3I6ICVzIDw8PFxuIiwgZm4pOworKwkgICAgfQorKwl9CisrICAgIEVYSVQoMCk7CisrICAg IHJldHVybiAwOworKyAgICB9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Ny eXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfZHNzdnMuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9m aXBzX2Rzc3ZzLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMJMjAxMC0wMy0zMCAx MDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNTM3IEBACisrI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRl IDxzdGRpby5oPgorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICAg IHByaW50ZigiTm8gRklQUyBEU0Egc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9Cisr I2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rz YS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPGN0eXBlLmg+CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIHZv aWQgcGJuKGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IGxlbiwgaTsK KysJdW5zaWduZWQgY2hhciAqdG1wOworKwlsZW4gPSBCTl9udW1fYnl0ZXMoYm4pOworKwl0bXAg PSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwlpZiAoIXRtcCkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwlC Tl9ibjJiaW4oYm4sIHRtcCk7CisrCXByaW50ZigiJXMgPSAiLCBuYW1lKTsKKysJZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKQorKwkJcHJpbnRmKCIlMDJYIiwgdG1wW2ldKTsKKysJZnB1dHMoIlxu Iiwgc3Rkb3V0KTsKKysJT1BFTlNTTF9mcmVlKHRtcCk7CisrCXJldHVybjsKKysJfQorKworK3Zv aWQgcHJpbWVzKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0MF07CisrICAgIGNoYXIgbGJ1 ZlsxMDI0MF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysKKysgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0ZG91 dCk7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJ Y29udGludWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiUHJpbWUiKSkKKysJICAgIHsKKysJICAg IEJJR05VTSAqcHA7CisrCisrCSAgICBwcD1CTl9uZXcoKTsKKysJICAgIGRvX2hleDJibigmcHAs dmFsdWUpOworKwkgICAgcHJpbnRmKCJyZXN1bHQ9ICVjXG4iLAorKwkJICAgQk5faXNfcHJpbWVf ZXgocHAsMjAsTlVMTCxOVUxMKSA/ICdQJyA6ICdGJyk7CisrCSAgICB9CSAgICAKKysJfQorKyAg ICB9CisrCisrdm9pZCBwcWcoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBj aGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgaW50IG5t b2Q9MDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwp CisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisr CQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZighc3Ry Y21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJOIikpCisrCSAgICB7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsK KysKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKworKwkgICAgd2hpbGUo bi0tKQorKwkJeworKwkJdW5zaWduZWQgY2hhciBzZWVkWzIwXTsKKysJCURTQSAqZHNhOworKwkJ aW50IGNvdW50ZXI7CisrCQl1bnNpZ25lZCBsb25nIGg7CisrCQlkc2EgPSBGSVBTX2RzYV9uZXco KTsKKysKKysJCWlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCBubW9kLHNlZWQs MCwmY291bnRlciwmaCxOVUxMKSkKKysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJ ZXhpdCgxKTsKKysJCQl9CisrCQlwYm4oIlAiLGRzYS0+cCk7CisrCQlwYm4oIlEiLGRzYS0+cSk7 CisrCQlwYm4oIkciLGRzYS0+Zyk7CisrCQlwdigiU2VlZCIsc2VlZCwyMCk7CisrCQlwcmludGYo ImMgPSAlZFxuIixjb3VudGVyKTsKKysJCXByaW50ZigiSCA9ICVseFxuIixoKTsKKysJCXB1dGMo J1xuJyxzdGRvdXQpOworKwkJfQorKwkgICAgfQorKwllbHNlCisrCSAgICBmcHV0cyhidWYsc3Rk b3V0KTsKKysJfQorKyAgICB9CisrCisrdm9pZCBwcWd2ZXIoKQorKyAgICB7CisrICAgIGNoYXIg YnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKKysgICAgQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEw7CisrICAg IGludCBjb3VudGVyLCBjb3VudGVyMjsKKysgICAgdW5zaWduZWQgbG9uZyBoLCBoMjsKKysgICAg RFNBICpkc2E9TlVMTDsKKysgICAgaW50IG5tb2Q9MDsKKysgICAgdW5zaWduZWQgY2hhciBzZWVk WzEwMjRdOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK KysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWZwdXRz KGJ1Ziwgc3Rkb3V0KTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICBubW9k PWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgcD1o ZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgcT1o ZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiRyIpKQorKwkgICAgZz1o ZXgyYm4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiU2VlZCIpKQorKwkgICAg eworKwkgICAgaW50IHNsZW4gPSBoZXgyYmluKHZhbHVlLCBzZWVkKTsKKysJICAgIGlmIChzbGVu ICE9IDIwKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJTZWVkIHBhcnNlIGxlbmd0aCBlcnJv clxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsImMiKSkKKysJICAgIGNvdW50ZXIgPWF0b2koYnVmKzQpOworKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiSCIpKQorKwkgICAgeworKwkgICAgaCA9IGF0b2kodmFsdWUpOworKwkgICAg aWYgKCFwIHx8ICFxIHx8ICFnKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJQYXJzZSBFcnJv clxuIik7CisrCQlleGl0ICgxKTsKKysJCX0KKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwor KwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwyMCAs JmNvdW50ZXIyLCZoMixOVUxMKSkKKysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJ ZXhpdCgxKTsKKysJCQl9CisrICAgICAgICAgICAgaWYgKEJOX2NtcChkc2EtPnAsIHApIHx8IEJO X2NtcChkc2EtPnEsIHEpIHx8IEJOX2NtcChkc2EtPmcsIGcpCisrCQl8fCAoY291bnRlciAhPSBj b3VudGVyMikgfHwgKGggIT0gaDIpKQorKwkgICAgCXByaW50ZigiUmVzdWx0ID0gRlxuIik7Cisr CSAgICBlbHNlCisrCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJICAgIEJOX2ZyZWUo cCk7CisrCSAgICBCTl9mcmVlKHEpOworKwkgICAgQk5fZnJlZShnKTsKKysJICAgIHAgPSBOVUxM OworKwkgICAgcSA9IE5VTEw7CisrCSAgICBnID0gTlVMTDsKKysJICAgIEZJUFNfZHNhX2ZyZWUo ZHNhKTsKKysJICAgIGRzYSA9IE5VTEw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKy8qIEtl eXBhaXIgdmVyaWZpY2F0aW9uIHJvdXRpbmUuIE5COiB0aGlzIGlzbid0IHBhcnQgb2YgdGhlIHN0 YW5kYXJkIEZJUFMxNDAtMgorKyAqIGFsZ29yaXRobSB0ZXN0cy4gSXQgaXMgYW4gYWRkaXRpb25h bCB0ZXN0IHRvIHBlcmZvcm0gc2FuaXR5IGNoZWNrcyBvbiB0aGUKKysgKiBvdXRwdXQgb2YgdGhl IEtleVBhaXIgdGVzdC4KKysgKi8KKysKKytzdGF0aWMgaW50IGRzc19wYXJhbWNoZWNrKGludCBu bW9kLCBCSUdOVU0gKnAsIEJJR05VTSAqcSwgQklHTlVNICpnLAorKwkJCQkJCQlCTl9DVFggKmN0 eCkKKysgICAgeworKyAgICBCSUdOVU0gKnJlbSA9IE5VTEw7CisrICAgIGlmIChCTl9udW1fYml0 cyhwKSAhPSBubW9kKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX251bV9iaXRzKHEpICE9IDE2 MCkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmltZV9leChwLCBCTl9wcmltZV9jaGVj a3MsIGN0eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7CisrICAgIGlmIChCTl9pc19wcmltZV9l eChxLCBCTl9wcmltZV9jaGVja3MsIGN0eCwgTlVMTCkgIT0gMSkKKysJcmV0dXJuIDA7CisrICAg IHJlbSA9IEJOX25ldygpOworKyAgICBpZiAoIUJOX21vZChyZW0sIHAsIHEsIGN0eCkgfHwgIUJO X2lzX29uZShyZW0pCisrICAgIAl8fCAoQk5fY21wKGcsIEJOX3ZhbHVlX29uZSgpKSA8PSAwKQor Kwl8fCAhQk5fbW9kX2V4cChyZW0sIGcsIHEsIHAsIGN0eCkgfHwgIUJOX2lzX29uZShyZW0pKQor Kwl7CisrCUJOX2ZyZWUocmVtKTsKKysJcmV0dXJuIDA7CisrCX0KKysgICAgLyogVG9kbzogY2hl Y2sgZyAqLworKyAgICBCTl9mcmVlKHJlbSk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisr dm9pZCBrZXl2ZXIoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxi dWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgQklHTlVNICpwID0g TlVMTCwgKnEgPSBOVUxMLCAqZyA9IE5VTEwsICpYID0gTlVMTCwgKlkgPSBOVUxMOworKyAgICBC SUdOVU0gKlkyOworKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7CisrICAgIGludCBubW9kPTAsIHBh cmFtY2hlY2sgPSAwOworKworKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7CisrICAgIFkyID0gQk5f bmV3KCk7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxM KQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQor KwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0 cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICB7CisrCSAgICBpZiAocCkKKysJCUJOX2ZyZWUo cCk7CisrCSAgICBwID0gTlVMTDsKKysJICAgIGlmIChxKQorKwkJQk5fZnJlZShxKTsKKysJICAg IHEgPSBOVUxMOworKwkgICAgaWYgKGcpCisrCQlCTl9mcmVlKGcpOworKwkgICAgZyA9IE5VTEw7 CisrCSAgICBwYXJhbWNoZWNrID0gMDsKKysJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7CisrCSAgICB9 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBwPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBxPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICBnPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJYIikpCisrCSAgICBYPWhleDJibih2YWx1ZSk7 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCisrCSAgICB7CisrCSAgICBZPWhleDJi bih2YWx1ZSk7CisrCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcgfHwgIVggfHwgIVkpCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQor KwkgICAgcGJuKCJQIixwKTsKKysJICAgIHBibigiUSIscSk7CisrCSAgICBwYm4oIkciLGcpOwor KwkgICAgcGJuKCJYIixYKTsKKysJICAgIHBibigiWSIsWSk7CisrCSAgICBpZiAoIXBhcmFtY2hl Y2spCisrCQl7CisrCQlpZiAoZHNzX3BhcmFtY2hlY2sobm1vZCwgcCwgcSwgZywgY3R4KSkKKysJ CQlwYXJhbWNoZWNrID0gMTsKKysJCWVsc2UKKysJCQlwYXJhbWNoZWNrID0gLTE7CisrCQl9Cisr CSAgICBpZiAocGFyYW1jaGVjayAhPSAxKQorKwkgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsK KysJICAgIGVsc2UKKysJCXsKKysJCWlmICghQk5fbW9kX2V4cChZMiwgZywgWCwgcCwgY3R4KSB8 fCBCTl9jbXAoWTIsIFkpKQorKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IEZcbiIpOworKwkgICAg ICAgIGVsc2UKKysJICAgIAkJcHJpbnRmKCJSZXN1bHQgPSBQXG4iKTsKKysJCX0KKysJICAgIEJO X2ZyZWUoWCk7CisrCSAgICBCTl9mcmVlKFkpOworKwkgICAgWCA9IE5VTEw7CisrCSAgICBZID0g TlVMTDsKKysJICAgIH0KKysJfQorKwlpZiAocCkKKysJICAgIEJOX2ZyZWUocCk7CisrCWlmIChx KQorKwkgICAgQk5fZnJlZShxKTsKKysJaWYgKGcpCisrCSAgICBCTl9mcmVlKGcpOworKwlpZiAo WTIpCisrCSAgICBCTl9mcmVlKFkyKTsKKysgICAgfQorKworK3ZvaWQga2V5cGFpcigpCisrICAg IHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hh ciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKworKyAgICB3aGlsZShmZ2V0 cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUo JmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQp OworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkg ICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKKysJ ICAgIHsKKysJICAgIERTQSAqZHNhOworKwkgICAgaW50IG49YXRvaSh2YWx1ZSk7CisrCisrCSAg ICBwcmludGYoIlttb2QgPSAlZF1cblxuIixubW9kKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25l dygpOworKwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVM TCwwLE5VTEwsTlVMTCxOVUxMKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhp dCgxKTsKKysJCX0KKysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5x KTsKKysJICAgIHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwor KwkgICAgd2hpbGUobi0tKQorKwkJeworKwkJaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisr CQkJeworKwkJCWRvX3ByaW50X2Vycm9ycygpOworKwkJCWV4aXQoMSk7CisrCQkJfQorKworKwkJ cGJuKCJYIixkc2EtPnByaXZfa2V5KTsKKysJCXBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysJCXB1 dGMoJ1xuJyxzdGRvdXQpOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lkIHNp Z2dlbigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQgbm1vZD0wOworKyAgICBE U0EgKmRzYT1OVUxMOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikg IT0gTlVMTCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1Ziwg YnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9Cisr CWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZh bHVlKTsKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgaWYgKGRz YSkKKysJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYSA9IEZJUFNfZHNhX25ldygpOwor KwkgICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2QsTlVMTCwwLE5V TEwsTlVMTCxOVUxMKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsK KysJCX0KKysJICAgIHBibigiUCIsZHNhLT5wKTsKKysJICAgIHBibigiUSIsZHNhLT5xKTsKKysJ ICAgIHBibigiRyIsZHNhLT5nKTsKKysJICAgIHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgfQor KwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTXNnIikpCisrCSAgICB7CisrCSAgICB1bnNpZ25l ZCBjaGFyIG1zZ1sxMDI0XTsKKysJICAgIHVuc2lnbmVkIGNoYXIgc2J1Zls2MF07CisrCSAgICB1 bnNpZ25lZCBpbnQgc2xlbjsKKysJICAgIGludCBuOworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAg ICBFVlBfTURfQ1RYIG1jdHg7CisrCSAgICBEU0FfU0lHICpzaWc7CisrCSAgICBFVlBfTURfQ1RY X2luaXQoJm1jdHgpOworKworKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7CisrCSAgICBwdigi TXNnIixtc2csbik7CisrCisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJCXsK KysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZXhpdCgxKTsKKysJCX0KKysJICAgIHBrLnR5cGUg PSBFVlBfUEtFWV9EU0E7CisrCSAgICBway5wa2V5LmRzYSA9IGRzYTsKKysJICAgIHBibigiWSIs ZHNhLT5wdWJfa2V5KTsKKysKKysJICAgIEVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX2RzczEo KSwgTlVMTCk7CisrCSAgICBFVlBfU2lnblVwZGF0ZSgmbWN0eCwgbXNnLCBuKTsKKysJICAgIEVW UF9TaWduRmluYWwoJm1jdHgsIHNidWYsICZzbGVuLCAmcGspOworKworKwkgICAgc2lnID0gRFNB X1NJR19uZXcoKTsKKysJICAgIEZJUFNfZHNhX3NpZ19kZWNvZGUoc2lnLCBzYnVmLCBzbGVuKTsK KysKKysJICAgIHBibigiUiIsc2lnLT5yKTsKKysJICAgIHBibigiUyIsc2lnLT5zKTsKKysJICAg IHB1dGMoJ1xuJyxzdGRvdXQpOworKwkgICAgRFNBX1NJR19mcmVlKHNpZyk7CisrCSAgICBFVlBf TURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwkgICAgfQorKwl9CisrCWlmIChkc2EpCisrCQlGSVBT X2RzYV9mcmVlKGRzYSk7CisrICAgIH0KKysKKyt2b2lkIHNpZ3ZlcigpCisrICAgIHsKKysgICAg RFNBICpkc2E9TlVMTDsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0 XTsKKysgICAgdW5zaWduZWQgY2hhciBtc2dbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2 YWx1ZTsKKysgICAgaW50IG5tb2Q9MCwgbj0wOworKyAgICBEU0FfU0lHIHNnLCAqc2lnID0gJnNn OworKworKyAgICBzaWctPnIgPSBOVUxMOworKyAgICBzaWctPnMgPSBOVUxMOworKworKyAgICB3 aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlpZiAoIXBh cnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCXsKKysJCWZwdXRzKGJ1 ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiW21v ZCIpKQorKwkgICAgeworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAgIGlmKGRzYSkKKysJ CUZJUFNfZHNhX2ZyZWUoZHNhKTsKKysJICAgIGRzYT1GSVBTX2RzYV9uZXcoKTsKKysJICAgIH0K KysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIGRzYS0+cD1oZXgyYm4odmFs dWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUSIpKQorKwkgICAgZHNhLT5xPWhleDJi bih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICB7CisrCSAg ICBkc2EtPmc9aGV4MmJuKHZhbHVlKTsKKysKKysJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4i LG5tb2QpOworKwkgICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOwor KwkgICAgcGJuKCJHIixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIG49aGV4 MmJpbih2YWx1ZSxtc2cpOworKwkgICAgcHYoIk1zZyIsbXNnLG4pOworKwkgICAgfQorKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiWSIpKQorKwkgICAgZHNhLT5wdWJfa2V5PWhleDJibih2YWx1 ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJSIikpCisrCSAgICBzaWctPnI9aGV4MmJu KHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlMiKSkKKysJICAgIHsKKysJICAg IEVWUF9NRF9DVFggbWN0eDsKKysJICAgIEVWUF9QS0VZIHBrOworKwkgICAgdW5zaWduZWQgY2hh ciBzaWdidWZbNjBdOworKwkgICAgdW5zaWduZWQgaW50IHNsZW47CisrCSAgICBpbnQgcjsKKysJ ICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrCSAgICBway50eXBlID0gRVZQX1BLRVlfRFNB OworKwkgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCSAgICBzaWctPnM9aGV4MmJuKHZhbHVlKTsK KysJCisrCSAgICBwYm4oIlkiLGRzYS0+cHViX2tleSk7CisrCSAgICBwYm4oIlIiLHNpZy0+cik7 CisrCSAgICBwYm4oIlMiLHNpZy0+cyk7CisrCisrCSAgICBzbGVuID0gRklQU19kc2Ffc2lnX2Vu Y29kZShzaWdidWYsIHNpZyk7CisrCSAgICBFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2Rz czEoKSwgTlVMTCk7CisrCSAgICBFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkg ICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnYnVmLCBzbGVuLCAmcGspOworKwkgICAg RVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysJCisrCSAgICBwcmludGYoIlJlc3VsdCA9ICVj XG4iLCByID09IDEgPyAnUCcgOiAnRicpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAg ICB9CisrCX0KKysgICAgfQorKworK2ludCBtYWluKGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAg ICB7CisrICAgIGlmKGFyZ2MgIT0gMikKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiJXMgW3ByaW1l fHBxZ3xwcWd2ZXJ8a2V5cGFpcnxzaWdnZW58c2lndmVyXVxuIixhcmd2WzBdKTsKKysJZXhpdCgx KTsKKysJfQorKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJeworKwlkb19wcmludF9lcnJv cnMoKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighc3RyY21wKGFyZ3ZbMV0sInByaW1lIikp CisrCXByaW1lcygpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFnIikpCisrCXBx ZygpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwicHFndmVyIikpCisrCXBxZ3Zlcigp OworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwia2V5cGFpciIpKQorKwlrZXlwYWlyKCk7 CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXl2ZXIiKSkKKysJa2V5dmVyKCk7Cisr ICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWdnZW4iKSkKKysJc2lnZ2VuKCk7CisrICAg IGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJzaWd2ZXIiKSkKKysJc2lndmVyKCk7CisrICAgIGVs c2UKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3Zb MV0pOworKwlleGl0KDEpOworKwl9CisrCisrICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5j LmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYworLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3ZzLmMuZmlwcwkyMDEwLTAzLTMw IDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Y2F2cy9maXBzX3JuZ3ZzLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BA IC0wLDAgKzEsMjMwIEBACisrLyoKKysgKiBDcnVkZSB0ZXN0IGRyaXZlciBmb3IgcHJvY2Vzc2lu ZyB0aGUgVlNUIGFuZCBNQ1QgdGVzdHZlY3RvciBmaWxlcworKyAqIGdlbmVyYXRlZCBieSB0aGUg Q01WUCBSTkdWUyBwcm9kdWN0LgorKyAqCisrICogTm90ZSB0aGUgaW5wdXQgZmlsZXMgYXJlIGFz c3VtZWQgdG8gaGF2ZSBhIF92ZXJ5XyBzcGVjaWZpYyBmb3JtYXQKKysgKiBhcyBkZXNjcmliZWQg aW4gdGhlIE5JU1QgZG9jdW1lbnQgIlRoZSBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcgorKyAqIFZh bGlkYXRpb24gU3lzdGVtIChSTkdWUykiLCBNYXkgMjUsIDIwMDQuCisrICoKKysgKi8KKysjaW5j bHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQor K3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJORyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuIDA7 CisrfQorKyNlbHNlCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIK KysKKyt2b2lkIHZzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciAqa2V5ID0gTlVMTDsK KysgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7CisrICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0g TlVMTDsKKysgICAgdW5zaWduZWQgY2hhciByZXRbMTZdOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsK KysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAg IGxvbmcgaSwga2V5bGVuOworKworKyAgICBrZXlsZW4gPSAwOworKworKyAgICB3aGlsZShmZ2V0 cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rkb3V0 KTsKKysJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0g MTY7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQorKwkJa2V5 bGVuID0gMjQ7CisrCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQor KwkJa2V5bGVuID0gMzI7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQorKwkJY29udGludWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCSAg ICB7CisrCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IGtleWxl bikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3Rp bmcgJWxkXG4iLCBrZXlsZW4pOworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKKysJICAgIHsKKysJICAgIGR0PWhleDJiaW5fbSh2YWx1 ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBEVCBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlm KCFzdHJjbXAoa2V5d29yZCwiViIpKQorKwkgICAgeworKwkgICAgdj1oZXgyYmluX20odmFsdWUs JmkpOworKwkgICAgaWYgKGkgIT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFs aWQgViBsZW5ndGhcbiIpOworKwkJcmV0dXJuOworKwkJfQorKworKwkgICAgaWYgKCFrZXkgfHwg IWR0KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7Cisr CQlyZXR1cm47CisrCQl9CisrCisrCSAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7 CisrCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2KTsKKysJICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQp OworKwkgICAgaWYgKEZJUFNfcmFuZF9ieXRlcyhyZXQsMTYpIDw9IDApCisrCQl7CisrCQlmcHJp bnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7CisrCSAgICAgICAgcmV0 dXJuOworKwkgICAgICAgIH0KKysKKysJICAgIHB2KCJSIixyZXQsMTYpOworKwkgICAgT1BFTlNT TF9mcmVlKGtleSk7CisrCSAgICBrZXkgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsK KysJICAgIGR0ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZSh2KTsKKysJICAgIHYgPSBOVUxM OworKwkgICAgfQorKwl9CisrICAgIH0KKysKKyt2b2lkIG1jdCgpCisrICAgIHsKKysgICAgdW5z aWduZWQgY2hhciAqa2V5ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqdiA9IE5VTEw7Cisr ICAgIHVuc2lnbmVkIGNoYXIgKmR0ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciByZXRbMTZd OworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBjaGFy ICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGxvbmcgaSwga2V5bGVuOworKyAgICBpbnQgajsKKysK KysgICAga2V5bGVuID0gMDsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3Rk aW4pICE9IE5VTEwpCisrCXsKKysJZnB1dHMoYnVmLHN0ZG91dCk7CisrCWlmKCFzdHJuY21wKGJ1 ZiwiW0FFUyAxMjgtS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDE2OworKwllbHNlIGlmKCFzdHJu Y21wKGJ1ZiwiW0FFUyAxOTItS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDI0OworKwllbHNlIGlm KCFzdHJuY21wKGJ1ZiwiW0FFUyAyNTYtS2V5XSIsIDEzKSkKKysJCWtleWxlbiA9IDMyOworKwlp ZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKKysJCWNvbnRpbnVl OworKwlpZighc3RyY21wKGtleXdvcmQsIktleSIpKQorKwkgICAgeworKwkgICAga2V5PWhleDJi aW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAoaSAhPSBrZXlsZW4pCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkludmFsaWQga2V5IGxlbmd0aCwgZXhwZWN0aW5nICVsZFxuIiwga2V5bGVuKTsK KysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkRU IikpCisrCSAgICB7CisrCSAgICBkdD1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkg IT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgRFQgbGVuZ3RoXG4iKTsK KysJCXJldHVybjsKKysJCX0KKysJICAgIH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlYi KSkKKysJICAgIHsKKysJICAgIHY9aGV4MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9 IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIFYgbGVuZ3RoXG4iKTsKKysJ CXJldHVybjsKKysJCX0KKysKKysJICAgIGlmICgha2V5IHx8ICFkdCkKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiTWlzc2luZyBrZXkgb3IgRFRcbiIpOworKwkJcmV0dXJuOworKwkJfQorKwor KwkgICAgRklQU19yYW5kX3NldF9rZXkoa2V5LCBrZXlsZW4pOworKwkgICAgRklQU19yYW5kX3Nl ZWQodiwxNik7CisrCSAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKKysJCXsKKysJCSAg ICBGSVBTX3JhbmRfc2V0X2R0KGR0KTsKKysJCSAgICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwx NikgPD0gMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBnZXR0aW5nIFBSTkcg dmFsdWVcbiIpOworKwkJICAgICAgICByZXR1cm47CisrCQkgICAgICAgIH0KKysJCSAgICAvKiBJ bmNyZW1lbnQgRFQgKi8KKysJCSAgICBmb3IgKGogPSAxNTsgaiA+PSAwOyBqLS0pCisrCQkJewor KwkJCWR0W2pdKys7CisrCQkJaWYgKGR0W2pdKQorKwkJCQlicmVhazsKKysJCQl9CisrCQl9Cisr CisrCSAgICBwdigiUiIscmV0LDE2KTsKKysJICAgIE9QRU5TU0xfZnJlZShrZXkpOworKwkgICAg a2V5ID0gTlVMTDsKKysJICAgIE9QRU5TU0xfZnJlZShkdCk7CisrCSAgICBkdCA9IE5VTEw7Cisr CSAgICBPUEVOU1NMX2ZyZWUodik7CisrCSAgICB2ID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAg ICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAgIHsKKysgICAgaWYo YXJnYyAhPSAyKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCIlcyBbbWN0fHZzdF1cbiIsYXJndlsw XSk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJ ZG9fcHJpbnRfZXJyb3JzKCk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgRklQU19yYW5kX3Jlc2V0 KCk7CisrICAgIGlmICghRklQU19yYW5kX3Rlc3RfbW9kZSgpKQorKwl7CisrCWZwcmludGYoc3Rk ZXJyLCAiRXJyb3Igc2V0dGluZyBQUk5HIHRlc3QgbW9kZVxuIik7CisrCWRvX3ByaW50X2Vycm9y cygpOworKwlleGl0KDEpOworKwl9CisrICAgIGlmKCFzdHJjbXAoYXJndlsxXSwibWN0IikpCisr CW1jdCgpOworKyAgICBlbHNlIGlmKCFzdHJjbXAoYXJndlsxXSwidnN0IikpCisrCXZzdCgpOwor KyAgICBlbHNlCisrCXsKKysJZnByaW50ZihzdGRlcnIsIkRvbid0IGtub3cgaG93IHRvICVzLlxu Iixhcmd2WzFdKTsKKysJZXhpdCgxKTsKKysJfQorKworKyAgICByZXR1cm4gMDsKKysgICAgfQor KyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNh Z3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0 LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jLmZp cHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FndGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAw MDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM5MCBAQAorKy8qIGZpcHNfcnNhZ3Rlc3QuYyAqLwor Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor KyAqIENvcHlyaWdodCAoYykgMjAwNSwyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJl IG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgor KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdA T3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAq ICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up CisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K KysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dy YXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQu Y29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAq IEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0 ZGlvLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2Jpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL3g1MDl2My5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSU0Egc3VwcG9y dFxuIik7CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlw c191dGwuaCIKKysKKytpbnQgcnNhX3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGlj IGludCByc2FfcHJpbnRrZXkxKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhwMSwg QklHTlVNICpYcDIsIEJJR05VTSAqWHAsCisrCQlCSUdOVU0gKmUpOworK3N0YXRpYyBpbnQgcnNh X3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAorKwkJQklHTlVNICpYcTEsIEJJR05VTSAq WHEyLCBCSUdOVU0gKlhxKTsKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisr CXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7Cisr CisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7Cisr CQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47Cisr CWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQor KwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwor KworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0 aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQp CisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBl cnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGlu KSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBR1RFU1QgZmlsZSBwcm9jZXNz aW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOwor KworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYg KGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQg IT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9Cisr CisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0KEZJ TEUgKm91dCwgRklMRSAqaW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwg KnE7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwlCSUdO VU0gKlhwMSA9IE5VTEwsICpYcDIgPSBOVUxMLCAqWHAgPSBOVUxMOworKwlCSUdOVU0gKlhxMSA9 IE5VTEwsICpYcTIgPSBOVUxMLCAqWHEgPSBOVUxMOworKwlCSUdOVU0gKmUgPSBOVUxMOworKwlp bnQgcmV0ID0gMDsKKysJaW50IGxudW0gPSAwOworKworKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFs bG9jKFJTQV9URVNUX01BWExJTkVMRU4pOworKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoUlNB X1RFU1RfTUFYTElORUxFTik7CisrCisrCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCisrCQln b3RvIGVycm9yOworKworKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFJTQV9URVNUX01BWExJTkVM RU4sIGluKSkKKysJCXsKKysJCWxudW0rKzsKKysJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7 CisrCQlrZXl3b3JkID0gbGluZWJ1ZjsKKysJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLworKwkJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJCWtleXdvcmQrKzsK KysKKysJCS8qIExvb2sgZm9yID0gc2lnbiAqLworKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScp OworKworKwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW2ZvbyA9IGJhcl0gbGlu ZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXAgfHwgKmtleXdvcmQ9PSdbJykKKysJCQl7CisrCQkJ aWYgKGZwdXRzKG9saW5lYnVmLCBvdXQpIDwgMCkKKysJCQkJZ290byBlcnJvcjsKKysJCQljb250 aW51ZTsKKysJCQl9CisrCisrCQlxID0gcCAtIDE7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcg c3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJCQkqcS0t ID0gMDsKKysKKysJCSpwID0gMDsKKysJCXZhbHVlID0gcCArIDE7CisrCisrCQkvKiBSZW1vdmUg bGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQg Y2hhcikqdmFsdWUpKQorKwkJCXZhbHVlKys7CisrCisrCQkvKiBSZW1vdmUgdHJhaWxpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLworKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisr CQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkq cC0tID0gMDsKKysKKysJCWlmICghc3RyY21wKGtleXdvcmQsICJ4cDEiKSkKKysJCQl7CisrCQkJ aWYgKFhwMSB8fCAhZG9faGV4MmJuKCZYcDEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMiIpKQorKwkJCXsKKysJ CQlpZiAoWHAyIHx8ICFkb19oZXgyYm4oJlhwMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHAiKSkKKysJCQl7Cisr CQkJaWYgKFhwIHx8ICFkb19oZXgyYm4oJlhwLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9lcnJv cjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJ4cTEiKSkKKysJCQl7Cisr CQkJaWYgKFhxMSB8fCAhZG9faGV4MmJuKCZYcTEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMiIpKQorKwkJCXsK KysJCQlpZiAoWHEyIHx8ICFkb19oZXgyYm4oJlhxMix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiWHEiKSkKKysJCQl7 CisrCQkJaWYgKFhxIHx8ICFkb19oZXgyYm4oJlhxLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJlIikpCisrCQkJewor KwkJCWlmIChlIHx8ICFkb19oZXgyYm4oJmUsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9y OworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAxIikpCisrCQkJY29udGlu dWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwMiIpKQorKwkJCWNvbnRpbnVlOwor KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgInEyIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3Ry Y21wKGtleXdvcmQsICJxIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJuIikpCisrCQkJY29udGludWU7CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJkIikpCisrCQkJY29udGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsKKysK KysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKGUgJiYgWHAxICYmIFhwMiAmJiBY cCkKKysJCQl7CisrCQkJcnNhID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJ CWdvdG8gZXJyb3I7CisrCQkJaWYgKCFyc2FfcHJpbnRrZXkxKG91dCwgcnNhLCBYcDEsIFhwMiwg WHAsIGUpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCUJOX2ZyZWUoWHAxKTsKKysJCQlYcDEgPSBO VUxMOworKwkJCUJOX2ZyZWUoWHAyKTsKKysJCQlYcDIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHAp OworKwkJCVhwID0gTlVMTDsKKysJCQlCTl9mcmVlKGUpOworKwkJCWUgPSBOVUxMOworKwkJCX0K KysKKysJCWlmIChyc2EgJiYgWHExICYmIFhxMiAmJiBYcSkKKysJCQl7CisrCQkJaWYgKCFyc2Ff cHJpbnRrZXkyKG91dCwgcnNhLCBYcTEsIFhxMiwgWHEpKQorKwkJCQlnb3RvIGVycm9yOworKwkJ CUJOX2ZyZWUoWHExKTsKKysJCQlYcTEgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEyKTsKKysJCQlY cTIgPSBOVUxMOworKwkJCUJOX2ZyZWUoWHEpOworKwkJCVhxID0gTlVMTDsKKysJCQlGSVBTX3Jz YV9mcmVlKHJzYSk7CisrCQkJcnNhID0gTlVMTDsKKysJCQl9CisrCQl9CisrCisrCXJldCA9IDE7 CisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVi dWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysKKysJaWYg KFhwMSkKKysJCUJOX2ZyZWUoWHAxKTsKKysJaWYgKFhwMikKKysJCUJOX2ZyZWUoWHAyKTsKKysJ aWYgKFhwKQorKwkJQk5fZnJlZShYcCk7CisrCWlmIChYcTEpCisrCQlCTl9mcmVlKFhxMSk7Cisr CWlmIChYcTEpCisrCQlCTl9mcmVlKFhxMSk7CisrCWlmIChYcTIpCisrCQlCTl9mcmVlKFhxMik7 CisrCWlmIChYcSkKKysJCUJOX2ZyZWUoWHEpOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7Cisr CWlmIChyc2EpCisrCQlGSVBTX3JzYV9mcmVlKHJzYSk7CisrCisrCXJldHVybiByZXQ7CisrCisr CXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHBy b2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7CisrCisrCX0KKysK KytzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05V TSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKKysJCUJJR05VTSAqZSkKKysJeworKwlp bnQgcmV0ID0gMDsKKysJQklHTlVNICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisrCXAxID0gQk5f bmV3KCk7CisrCXAyID0gQk5fbmV3KCk7CisrCWlmICghcDEgfHwgIXAyKQorKwkJZ290byBlcnJv cjsKKysKKysJaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBwMSwgcDIsIE5VTEwsIE5VTEws IFhwMSwgWHAyLCBYcCwKKysJCQkJCQlOVUxMLCBOVUxMLCBOVUxMLCBlLCBOVUxMKSkKKysJCWdv dG8gZXJyb3I7CisrCisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicDEiLCBwMSk7CisrCWRvX2Ju X3ByaW50X25hbWUob3V0LCAicDIiLCBwMik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicCIs IHJzYS0+cCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlpZiAocDEpCisrCQlCTl9m cmVlKHAxKTsKKysJaWYgKHAyKQorKwkJQk5fZnJlZShwMik7CisrCisrCXJldHVybiByZXQ7Cisr CX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludGtleTIoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJ CUJJR05VTSAqWHExLCBCSUdOVU0gKlhxMiwgQklHTlVNICpYcSkKKysJeworKwlpbnQgcmV0ID0g MDsKKysJQklHTlVNICpxMSA9IE5VTEwsICpxMiA9IE5VTEw7CisrCXExID0gQk5fbmV3KCk7Cisr CXEyID0gQk5fbmV3KCk7CisrCWlmICghcTEgfHwgIXEyKQorKwkJZ290byBlcnJvcjsKKysKKysJ aWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBxMSwgcTIsIE5VTEwsIE5V TEwsIE5VTEwsCisrCQkJCQkJWHExLCBYcTIsIFhxLCBOVUxMLCBOVUxMKSkKKysJCWdvdG8gZXJy b3I7CisrCisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicTEiLCBxMSk7CisrCWRvX2JuX3ByaW50 X25hbWUob3V0LCAicTIiLCBxMik7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAicSIsIHJzYS0+ cSk7CisrCWRvX2JuX3ByaW50X25hbWUob3V0LCAibiIsIHJzYS0+bik7CisrCWRvX2JuX3ByaW50 X25hbWUob3V0LCAiZCIsIHJzYS0+ZCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlp ZiAocTEpCisrCQlCTl9mcmVlKHExKTsKKysJaWYgKHEyKQorKwkJQk5fZnJlZShxMik7CisrCisr CXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9m aXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYwky MDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzNzAgQEAKKysv KiBmaXBzX3JzYXN0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24g KHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisr ICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor KyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlz dHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK KysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAor KyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysg KiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdy aXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8K KysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMK KysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJO byBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQor KworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0YXRpYyBpbnQgcnNhX3N0ZXN0KEZJTEUg Km91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKTsKKytzdGF0aWMgaW50IHJzYV9wcmludHNpZyhG SUxFICpvdXQsIFJTQSAqcnNhLCBjb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFy ICpNc2csIGxvbmcgTXNnbGVuLCBpbnQgU2FsdGxlbik7CisrCisraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwgKm91dCA9IE5VTEw7CisrCisr CWludCByZXQgPSAxLCBTYWx0bGVuID0gLTE7CisrCisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQor KwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYg KChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKKysJCXsKKysJCVNh bHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYgKFNhbHRsZW4gPCAwKQorKwkJCXsKKysJCQlm cHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKKysJCQlnb3Rv IGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7CisrCQlhcmd2ICs9IDI7CisrCQl9CisrCWVsc2Ug aWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKKysJCXsKKysJCVNh bHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJCWFyZ3YrKzsKKysJCX0KKysKKysJaWYgKGFyZ2Mg PT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UKKysJCWluID0gZm9wZW4oYXJndlsxXSwgInIi KTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQg PSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlpZiAoIWluKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVu ZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFM IG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysK KysJaWYgKCFyc2Ffc3Rlc3Qob3V0LCBpbiwgU2FsdGxlbikpCisrCQl7CisrCQlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIFJTQVNURVNUIGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3Rv IGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0 KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQor KwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uo b3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgUlNBX1RFU1RfTUFY TElORUxFTgkxMDI0MAorKworK2ludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbiwgaW50 IFNhbHRsZW4pCisrCXsKKysJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7CisrCWNo YXIgKmtleXdvcmQsICp2YWx1ZTsKKysJUlNBICpyc2EgPSBOVUxMOworKwljb25zdCBFVlBfTUQg KmRnc3QgPSBOVUxMOworKwl1bnNpZ25lZCBjaGFyICpNc2cgPSBOVUxMOworKwlsb25nIE1zZ2xl biA9IC0xOworKwlpbnQga2V5bGVuID0gLTEsIGN1cnJlbnRfa2V5bGVuID0gLTE7CisrCWludCBy ZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2Mo UlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVT VF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8g ZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElORUxFTiwg aW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJ CWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKwor KwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7Cisr CisrCQkvKiBJZiBubyA9IGp1c3QgY29weSAqLworKwkJaWYgKCFwKQorKwkJCXsKKysJCQlpZiAo ZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNvbnRpbnVl OworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFj ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAw OworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFk aW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBm cm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysKKysJCXdo aWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0g PSAwOworKworKwkJLyogTG9vayBmb3IgW21vZCA9IFhYWF0gZm9yIGtleSBsZW5ndGggKi8KKysK KysJCWlmICghc3RyY21wKGtleXdvcmQsICJbbW9kIikpCisrCQkJeworKwkJCXAgPSB2YWx1ZSAr IHN0cmxlbih2YWx1ZSkgLSAxOworKwkJCWlmICgqcCAhPSAnXScpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJKnAgPSAwOworKwkJCWtleWxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChr ZXlsZW4gPCAwKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2YWx1ZSwg IlNIQTEiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2 YWx1ZSwgIlNIQTIyNCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVsc2UgaWYg KCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYoKTsKKysJ CQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hh Mzg0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJCQlkZ3N0 ID0gRVZQX3NoYTUxMigpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0ZGVyciwK KysJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJCQkJCQkJ CXZhbHVlKTsKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJKigtLXZh bHVlKSA9ICcwJzsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOworKwkJCWlm ICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysKKysJCWZwdXRzKG9saW5l YnVmLCBvdXQpOworKworKwkJLyogSWYga2V5IGxlbmd0aCBoYXMgY2hhbmdlZCwgZ2VuZXJhdGUg YW5kIG91dHB1dCBwdWJsaWMKKysJCSAqIGtleSBjb21wb25lbnRzIG9mIG5ldyBSU0EgcHJpdmF0 ZSBrZXkuCisrCQkgKi8KKysKKysJCWlmIChrZXlsZW4gIT0gY3VycmVudF9rZXlsZW4pCisrCQkJ eworKwkJCUJJR05VTSAqYm5fZTsKKysJCQlpZiAocnNhKQorKwkJCQlGSVBTX3JzYV9mcmVlKHJz YSk7CisrCQkJcnNhID0gRklQU19yc2FfbmV3KCk7CisrCQkJaWYgKCFyc2EpCisrCQkJCWdvdG8g ZXJyb3I7CisrCQkJYm5fZSA9IEJOX25ldygpOworKwkJCWlmICghYm5fZSB8fCAhQk5fc2V0X3dv cmQoYm5fZSwgMHgxMDAxKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlpZiAoIVJTQV9YOTMxX2dl bmVyYXRlX2tleV9leChyc2EsIGtleWxlbiwgYm5fZSwgTlVMTCkpCisrCQkJCWdvdG8gZXJyb3I7 CisrCQkJQk5fZnJlZShibl9lKTsKKysJCQlmcHV0cygibiA9ICIsIG91dCk7CisrCQkJZG9fYm5f cHJpbnQob3V0LCByc2EtPm4pOworKwkJCWZwdXRzKCJcbmUgPSAiLCBvdXQpOworKwkJCWRvX2Ju X3ByaW50KG91dCwgcnNhLT5lKTsKKysJCQlmcHV0cygiXG4iLCBvdXQpOworKwkJCWN1cnJlbnRf a2V5bGVuID0ga2V5bGVuOworKwkJCX0KKysKKysJCWlmIChNc2cgJiYgZGdzdCkKKysJCQl7Cisr CQkJaWYgKCFyc2FfcHJpbnRzaWcob3V0LCByc2EsIGRnc3QsIE1zZywgTXNnbGVuLAorKwkJCQkJ CQkJU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7Cisr CQkJTXNnID0gTlVMTDsKKysJCQl9CisrCisrCQl9CisrCisrCXJldCA9IDE7CisrCisrCWVycm9y OgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAo bGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKHJzYSkKKysJCUZJUFNf cnNhX2ZyZWUocnNhKTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJcGFyc2VfZXJyb3I6CisrCisr CWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4i LCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQorKworK3N0YXRpYyBpbnQgcnNhX3By aW50c2lnKEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2ln bmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKQorKwl7CisrCWludCByZXQg PSAwOworKwl1bnNpZ25lZCBjaGFyICpzaWdidWYgPSBOVUxMOworKwlpbnQgaSwgc2lnbGVuOwor KwkvKiBFVlBfUEtFWSBzdHJ1Y3R1cmUgKi8KKysJRVZQX1BLRVkgcGs7CisrCUVWUF9NRF9DVFgg Y3R4OworKwlway50eXBlID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJzYTsKKysK KysJc2lnbGVuID0gUlNBX3NpemUocnNhKTsKKysJc2lnYnVmID0gT1BFTlNTTF9tYWxsb2Moc2ln bGVuKTsKKysJaWYgKCFzaWdidWYpCisrCQlnb3RvIGVycm9yOworKworKwlFVlBfTURfQ1RYX2lu aXQoJmN0eCk7CisrCisrCWlmIChTYWx0bGVuID49IDApCisrCQl7CisrCQlNX0VWUF9NRF9DVFhf c2V0X2ZsYWdzKCZjdHgsCisrCQkJRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgfCAoU2FsdGxlbiA8 PCAxNikpOworKwkJfQorKwllbHNlIGlmIChTYWx0bGVuID09IC0yKQorKwkJTV9FVlBfTURfQ1RY X3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpOworKwlpZiAoIUVWUF9T aWduSW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQ X1NpZ25VcGRhdGUoJmN0eCwgTXNnLCBNc2dsZW4pKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFF VlBfU2lnbkZpbmFsKCZjdHgsIHNpZ2J1ZiwgKHVuc2lnbmVkIGludCAqKSZzaWdsZW4sICZwaykp CisrCQlnb3RvIGVycm9yOworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWZw dXRzKCJTID0gIiwgb3V0KTsKKysKKysJZm9yIChpID0gMDsgaSA8IHNpZ2xlbjsgaSsrKQorKwkJ ZnByaW50ZihvdXQsICIlMDJYIiwgc2lnYnVmW2ldKTsKKysKKysJZnB1dHMoIlxuIiwgb3V0KTsK KysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5k aWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0 LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCist LS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYy5maXBzCTIw MTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAw MCArMDIwMAorQEAgLTAsMCArMSwzNzcgQEAKKysvKiBmaXBzX3JzYXZ0ZXN0LmMgKi8KKysvKiBX cml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhl IE9wZW5TU0wKKysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0 amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysj aW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv aG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3g1 MDl2My5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNh Lmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBwb3J0XG4iKTsKKysg ICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgor KworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgc2FsdGxlbik7Cisrc3Rh dGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVNICpuLCBCSUdOVU0gKmUs CisrCQljb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGxvbmcgTXNn bGVuLAorKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQgU2FsdGxlbik7CisrCisr aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVMTCwg Km91dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxOworKwlpbnQgU2FsdGxlbiA9IC0xOworKwor KwlpZighRklQU19tb2RlX3NldCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJ Z290byBlbmQ7CisrCQl9CisrCisrCWlmICgoYXJnYyA+IDIpICYmICFzdHJjbXAoIi1zYWx0bGVu IiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gYXRvaShhcmd2WzJdKTsKKysJCWlmIChT YWx0bGVuIDwgMCkKKysJCQl7CisrCQkJZnByaW50ZihzdGRlcnIsICJGQVRBTDogSW52YWxpZCBz YWx0IGxlbmd0aFxuIik7CisrCQkJZ290byBlbmQ7CisrCQkJfQorKwkJYXJnYyAtPSAyOworKwkJ YXJndiArPSAyOworKwkJfQorKwllbHNlIGlmICgoYXJnYyA+IDEpICYmICFzdHJjbXAoIi14OTMx IiwgYXJndlsxXSkpCisrCQl7CisrCQlTYWx0bGVuID0gLTI7CisrCQlhcmdjLS07CisrCQlhcmd2 Kys7CisrCQl9CisrCisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisr CQlpbiA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9 IHN0ZG91dDsKKysJZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYg KCFpbikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRp b24gZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJewor KwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIp OworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghcnNhX3Rlc3Qob3V0LCBpbiwgU2FsdGxl bikpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIFJTQVZURVNUIGZpbGUgcHJvY2Vz c2luZyBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsK KysKKysJZW5kOgorKworKwlpZiAocmV0KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlm IChpbiAmJiAoaW4gIT0gc3RkaW4pKQorKwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0 ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uob3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQor KworKyNkZWZpbmUgUlNBX1RFU1RfTUFYTElORUxFTgkxMDI0MAorKworK2ludCByc2FfdGVzdChG SUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxlbikKKysJeworKwljaGFyICpsaW5lYnVmLCAq b2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwljb25zdCBFVlBf TUQgKmRnc3QgPSBOVUxMOworKwlCSUdOVU0gKm4gPSBOVUxMLCAqZSA9IE5VTEw7CisrCXVuc2ln bmVkIGNoYXIgKk1zZyA9IE5VTEwsICpTID0gTlVMTDsKKysJbG9uZyBNc2dsZW4sIFNsZW47Cisr CWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhS U0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJ CWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElO RUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVm KTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisr CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsr OworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9 Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBs aW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQorKwkJCXsKKysJ CQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNv bnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpx LS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92 ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBz cGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysK KysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJ CSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIm4iKSkKKysJCQl7CisrCQkJ aWYgKCFkb19oZXgyYm4oJm4sdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0K KysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKKysJCQl7CisrCQkJaWYgKCFkb19o ZXgyYm4oJmUsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgIlNIQUFsZyIpKQorKwkJCXsKKysJCQlpZiAoIXN0cmNtcCh2 YWx1ZSwgIlNIQTEiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGExKCk7CisrCQkJZWxzZSBpZiAoIXN0 cmNtcCh2YWx1ZSwgIlNIQTIyNCIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTIyNCgpOworKwkJCWVs c2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEyNTYiKSkKKysJCQkJZGdzdCA9IEVWUF9zaGEyNTYo KTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMzg0IikpCisrCQkJCWRnc3QgPSBF VlBfc2hhMzg0KCk7CisrCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTUxMiIpKQorKwkJ CQlkZ3N0ID0gRVZQX3NoYTUxMigpOworKwkJCWVsc2UKKysJCQkJeworKwkJCQlmcHJpbnRmKHN0 ZGVyciwKKysJCQkJCSJGQVRBTDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIFwiJXNcIlxuIiwKKysJ CQkJCQkJCXZhbHVlKTsKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQorKwkJCXsKKysJCQlpZiAoTXNnKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJ KigtLXZhbHVlKSA9ICcwJzsKKysJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZNc2dsZW4pOwor KwkJCWlmICghTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIlMiKSkKKysJCQl7CisrCQkJaWYgKFMpCisrCQkJCWdvdG8gcGFy c2VfZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0tdmFsdWUpID0g JzAnOworKwkJCVMgPSBoZXgyYmluX20odmFsdWUsICZTbGVuKTsKKysJCQlpZiAoIVMpCisrCQkJ CWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi UmVzdWx0IikpCisrCQkJY29udGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsK KysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKG4gJiYgZSAmJiBNc2cgJiYg UyAmJiBkZ3N0KQorKwkJCXsKKysJCQlpZiAoIXJzYV9wcmludHZlcihvdXQsIG4sIGUsIGRnc3Qs CisrCQkJCQlNc2csIE1zZ2xlbiwgUywgU2xlbiwgU2FsdGxlbikpCisrCQkJCWdvdG8gZXJyb3I7 CisrCQkJT1BFTlNTTF9mcmVlKE1zZyk7CisrCQkJTXNnID0gTlVMTDsKKysJCQlPUEVOU1NMX2Zy ZWUoUyk7CisrCQkJUyA9IE5VTEw7CisrCQkJfQorKworKwkJfQorKworKworKwlyZXQgPSAxOwor KworKworKwllcnJvcjoKKysKKysJaWYgKG9saW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKG9saW5l YnVmKTsKKysJaWYgKGxpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7CisrCWlmIChu KQorKwkJQk5fZnJlZShuKTsKKysJaWYgKGUpCisrCQlCTl9mcmVlKGUpOworKworKwlyZXR1cm4g cmV0OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJz ZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOwor KworKwl9CisrCisrc3RhdGljIGludCByc2FfcHJpbnR2ZXIoRklMRSAqb3V0LAorKwkJQklHTlVN ICpuLCBCSUdOVU0gKmUsCisrCQljb25zdCBFVlBfTUQgKmRnc3QsCisrCQl1bnNpZ25lZCBjaGFy ICpNc2csIGxvbmcgTXNnbGVuLAorKwkJdW5zaWduZWQgY2hhciAqUywgbG9uZyBTbGVuLCBpbnQg U2FsdGxlbikKKysJeworKwlpbnQgcmV0ID0gMCwgcjsKKysJLyogU2V0dXAgUlNBIGFuZCBFVlBf UEtFWSBzdHJ1Y3R1cmVzICovCisrCVJTQSAqcnNhX3B1YmtleSA9IE5VTEw7CisrCUVWUF9QS0VZ IHBrOworKwlFVlBfTURfQ1RYIGN0eDsKKysJdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKKysJ cnNhX3B1YmtleSA9IEZJUFNfcnNhX25ldygpOworKwlpZiAoIXJzYV9wdWJrZXkpCisrCQlnb3Rv IGVycm9yOworKwlyc2FfcHVia2V5LT5uID0gQk5fZHVwKG4pOworKwlyc2FfcHVia2V5LT5lID0g Qk5fZHVwKGUpOworKwlpZiAoIXJzYV9wdWJrZXktPm4gfHwgIXJzYV9wdWJrZXktPmUpCisrCQln b3RvIGVycm9yOworKwlway50eXBlID0gRVZQX1BLRVlfUlNBOworKwlway5wa2V5LnJzYSA9IHJz YV9wdWJrZXk7CisrCisrCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRsZW4g Pj0gMCkKKysJCXsKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYgKFNh bHRsZW4gPT0gLTIpCisrCQlNX0VWUF9NRF9DVFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhf RkxBR19QQURfWDkzMSk7CisrCWlmICghRVZQX1ZlcmlmeUluaXRfZXgoJmN0eCwgZGdzdCwgTlVM TCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJmN0eCwgTXNnLCBN c2dsZW4pKQorKwkJZ290byBlcnJvcjsKKysKKysJciA9IEVWUF9WZXJpZnlGaW5hbCgmY3R4LCBT LCBTbGVuLCAmcGspOworKworKworKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0eCk7CisrCisrCWlm IChyIDwgMCkKKysJCWdvdG8gZXJyb3I7CisrCUVSUl9jbGVhcl9lcnJvcigpOworKworKwlpZiAo ciA9PSAwKQorKwkJZnB1dHMoIlJlc3VsdCA9IEZcbiIsIG91dCk7CisrCWVsc2UKKysJCWZwdXRz KCJSZXN1bHQgPSBQXG4iLCBvdXQpOworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysJaWYg KHJzYV9wdWJrZXkpCisrCQlGSVBTX3JzYV9mcmVlKHJzYV9wdWJrZXkpOworKwlpZiAoYnVmKQor KwkJT1BFTlNTTF9mcmVlKGJ1Zik7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysjZW5kaWYKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYworLS0tIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYy5maXBzCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9j YXZzL2ZpcHNfc2hhdGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitA QCAtMCwwICsxLDM4OCBAQAorKy8qIGZpcHNfc2hhdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBE ciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisr ICogcHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDA1IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq CisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRl biBieSBFcmljIFlvdW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29m dC5jb20pLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGN0 eXBlLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrCisr I2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFNIQVhYWCBzdXBwb3J0XG4iKTsKKysgICAgcmV0 dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJmaXBzX3V0bC5oIgorKworK3N0 YXRpYyBpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4pOworK3N0YXRpYyBpbnQgcHJp bnRfZGdzdChjb25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpN c2csIGludCBNc2dsZW4pOworK3N0YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICpt ZCwgRklMRSAqb3V0LAorKwkJdW5zaWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pOworKwor K2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysJeworKwlGSUxFICppbiA9IE5VTEws ICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0gMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQo MSkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwor KwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihh cmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVs c2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7Cisr CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsK KysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3Rk ZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5k OworKwkJfQorKworKwlpZiAoIWRnc3RfdGVzdChvdXQsIGluKSkKKysJCXsKKysJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgZGlnZXN0IGZpbGUgcHJvY2Vzc2luZyBlcnJvclxuIik7CisrCQlnb3Rv IGVuZDsKKysJCX0KKysJZWxzZQorKwkJcmV0ID0gMDsKKysKKysJZW5kOgorKworKwlpZiAocmV0 KQorKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCisrCWlmIChpbiAmJiAoaW4gIT0gc3RkaW4pKQor KwkJZmNsb3NlKGluKTsKKysJaWYgKG91dCAmJiAob3V0ICE9IHN0ZG91dCkpCisrCQlmY2xvc2Uo b3V0KTsKKysKKysJcmV0dXJuIHJldDsKKysKKysJfQorKworKyNkZWZpbmUgU0hBX1RFU1RfTUFY X0JJVFMJMTAyNDAwCisrI2RlZmluZSBTSEFfVEVTVF9NQVhMSU5FTEVOCSgoKFNIQV9URVNUX01B WF9CSVRTID4+IDMpICogMikgKyAxMDApCisrCisraW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJ TEUgKmluKQorKwl7CisrCWNvbnN0IEVWUF9NRCAqbWQgPSBOVUxMOworKwljaGFyICpsaW5lYnVm LCAqb2xpbmVidWYsICpwLCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwl1bnNpZ25l ZCBjaGFyICpNc2cgPSBOVUxMLCAqU2VlZCA9IE5VTEw7CisrCWxvbmcgTXNnTGVuID0gLTEsIExl biA9IC0xLCBTZWVkTGVuID0gLTE7CisrCWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7Cisr CisrCW9saW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFYTElORUxFTik7CisrCWxp bmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFs aW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCisrCXdoaWxlIChmZ2V0 cyhvbGluZWJ1ZiwgU0hBX1RFU1RfTUFYTElORUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOwor KwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVmKTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJ LyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hh cikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsrOworKworKwkJLyogTG9vayBmb3IgPSBzaWduICov CisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0 cyB3aXRoIFsgKGZvciBbTD0yMF0gbGluZSkganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisrCQkJ eworKwkJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKwkJCWNvbnRpbnVlOworKwkJCX0KKysKKysJ CXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSAqLworKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpxLS0gPSAwOworKworKwkJKnAgPSAw OworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20g dmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCisrCQkJ dmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisr CQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysJCXdoaWxlICgqcCA9PSAnXG4nIHx8 IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAwOworKworKwkJaWYgKCFz dHJjbXAoa2V5d29yZCwiW0wiKSAmJiAqcD09J10nKQorKwkJCXsKKysJCQlzd2l0Y2ggKGF0b2ko dmFsdWUpKQorKwkJCQl7CisrCQkJCWNhc2UgMjA6IG1kPUVWUF9zaGExKCk7ICAgYnJlYWs7Cisr CQkJCWNhc2UgMjg6IG1kPUVWUF9zaGEyMjQoKTsgYnJlYWs7CisrCQkJCWNhc2UgMzI6IG1kPUVW UF9zaGEyNTYoKTsgYnJlYWs7CisrCQkJCWNhc2UgNDg6IG1kPUVWUF9zaGEzODQoKTsgYnJlYWs7 CisrCQkJCWNhc2UgNjQ6IG1kPUVWUF9zaGE1MTIoKTsgYnJlYWs7CisrCQkJCWRlZmF1bHQ6IGdv dG8gcGFyc2VfZXJyb3I7CisrCQkJCX0KKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdv cmQsICJMZW4iKSkKKysJCQl7CisrCQkJaWYgKExlbiAhPSAtMSkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQlMZW4gPSBhdG9pKHZhbHVlKTsKKysJCQlpZiAoTGVuIDwgMCkKKysJCQkJZ290 byBwYXJzZV9lcnJvcjsKKysJCQkvKiBPbmx5IGhhbmRsZSBtdWx0aXBsZXMgb2YgOCBiaXRzICov CisrCQkJaWYgKExlbiAmIDB4NykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlpZiAoTGVu ID4gU0hBX1RFU1RfTUFYX0JJVFMpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJTXNnTGVu ID0gTGVuID4+IDM7CisrCQkJfQorKworKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNn IikpCisrCQkJeworKwkJCWxvbmcgdG1wbGVuOworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkK KysJCQkJKigtLXZhbHVlKSA9ICcwJzsKKysJCQlpZiAoTXNnKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJnRtcGxlbik7CisrCQkJaWYgKCFNc2cp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiU2VlZCIpKQorKwkJCXsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSoo LS12YWx1ZSkgPSAnMCc7CisrCQkJaWYgKFNlZWQpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CQkJU2VlZCA9IGhleDJiaW5fbSh2YWx1ZSwgJlNlZWRMZW4pOworKwkJCWlmICghU2VlZCkKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJNRCIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZQorKwkJCWdvdG8gcGFyc2VfZXJyb3I7Cisr CisrCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKKysKKysJCWlmIChtZCAmJiBNc2cgJiYgKE1zZ0xl biA+PSAwKSkKKysJCQl7CisrCQkJaWYgKCFwcmludF9kZ3N0KG1kLCBvdXQsIE1zZywgTXNnTGVu KSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBO VUxMOworKwkJCU1zZ0xlbiA9IC0xOworKwkJCUxlbiA9IC0xOworKwkJCX0KKysJCWVsc2UgaWYg KG1kICYmIFNlZWQgJiYgKFNlZWRMZW4gPiAwKSkKKysJCQl7CisrCQkJaWYgKCFwcmludF9tb250 ZShtZCwgb3V0LCBTZWVkLCBTZWVkTGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NM X2ZyZWUoU2VlZCk7CisrCQkJU2VlZCA9IE5VTEw7CisrCQkJU2VlZExlbiA9IC0xOworKwkJCX0K KysJCisrCisrCQl9CisrCisrCisrCXJldCA9IDE7CisrCisrCisrCWVycm9yOgorKworKwlpZiAo b2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJ CU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYgKE1zZykKKysJCU9QRU5TU0xfZnJlZShNc2cp OworKwlpZiAoU2VlZCkKKysJCU9QRU5TU0xfZnJlZShTZWVkKTsKKysKKysJcmV0dXJuIHJldDsK KysKKysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJy b3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJ fQorKworK3N0YXRpYyBpbnQgcHJpbnRfZGdzdChjb25zdCBFVlBfTUQgKmVtZCwgRklMRSAqb3V0 LAorKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKQorKwl7CisrCWludCBpLCBtZGxl bjsKKysJdW5zaWduZWQgY2hhciBtZFtFVlBfTUFYX01EX1NJWkVdOworKwlpZiAoIUVWUF9EaWdl c3QoTXNnLCBNc2dsZW4sIG1kLCAodW5zaWduZWQgaW50ICopJm1kbGVuLCBlbWQsIE5VTEwpKQor KwkJeworKwkJZnB1dHMoIkVycm9yIGNhbGN1bGF0aW5nIEhBU0hcbiIsIHN0ZGVycik7CisrCQly ZXR1cm4gMDsKKysJCX0KKysJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJZm9yIChpID0gMDsgaSA8 IG1kbGVuOyBpKyspCisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCBtZFtpXSk7CisrCWZwdXRzKCJc biIsIG91dCk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBwcmludF9tb250ZShj b25zdCBFVlBfTUQgKm1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQg U2VlZExlbikKKysJeworKwl1bnNpZ25lZCBpbnQgaSwgaiwgazsKKysJaW50IHJldCA9IDA7Cisr CUVWUF9NRF9DVFggY3R4OworKwl1bnNpZ25lZCBjaGFyICptMSwgKm0yLCAqbTMsICpwOworKwl1 bnNpZ25lZCBpbnQgbWxlbiwgbTFsZW4sIG0ybGVuLCBtM2xlbjsKKysKKysJRVZQX01EX0NUWF9p bml0KCZjdHgpOworKworKwlpZiAoU2VlZExlbiA+IEVWUF9NQVhfTURfU0laRSkKKysJCW1sZW4g PSBTZWVkTGVuOworKwllbHNlCisrCQltbGVuID0gRVZQX01BWF9NRF9TSVpFOworKworKwltMSA9 IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKwltMiA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKwlt MyA9IE9QRU5TU0xfbWFsbG9jKG1sZW4pOworKworKwlpZiAoIW0xIHx8ICFtMiB8fCAhbTMpCisr CQlnb3RvIG1jX2Vycm9yOworKworKwltMWxlbiA9IG0ybGVuID0gbTNsZW4gPSBTZWVkTGVuOwor KwltZW1jcHkobTEsIFNlZWQsIFNlZWRMZW4pOworKwltZW1jcHkobTIsIFNlZWQsIFNlZWRMZW4p OworKwltZW1jcHkobTMsIFNlZWQsIFNlZWRMZW4pOworKworKwlmcHV0cygiXG4iLCBvdXQpOwor KworKwlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspCisrCQl7CisrCQlmb3IgKGkgPSAwOyBpIDwg MTAwMDsgaSsrKQorKwkJCXsKKysJCQlFVlBfRGlnZXN0SW5pdF9leCgmY3R4LCBtZCwgTlVMTCk7 CisrCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmY3R4LCBtMSwgbTFsZW4pOworKwkJCUVWUF9EaWdlc3RV cGRhdGUoJmN0eCwgbTIsIG0ybGVuKTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0zLCBt M2xlbik7CisrCQkJcCA9IG0xOworKwkJCW0xID0gbTI7CisrCQkJbTFsZW4gPSBtMmxlbjsKKysJ CQltMiA9IG0zOworKwkJCW0ybGVuID0gbTNsZW47CisrCQkJbTMgPSBwOworKwkJCUVWUF9EaWdl c3RGaW5hbF9leCgmY3R4LCBtMywgJm0zbGVuKTsKKysJCQl9CisrCQlmcHJpbnRmKG91dCwgIkNP VU5UID0gJWRcbiIsIGopOworKwkJZnB1dHMoIk1EID0gIiwgb3V0KTsKKysJCWZvciAoayA9IDA7 IGsgPCBtM2xlbjsgaysrKQorKwkJCWZwcmludGYob3V0LCAiJTAyeCIsIG0zW2tdKTsKKysJCWZw dXRzKCJcblxuIiwgb3V0KTsKKysJCW1lbWNweShtMSwgbTMsIG0zbGVuKTsKKysJCW1lbWNweSht MiwgbTMsIG0zbGVuKTsKKysJCW0xbGVuID0gbTJsZW4gPSBtM2xlbjsKKysJCX0KKysKKysJcmV0 ID0gMTsKKysKKysJbWNfZXJyb3I6CisrCWlmIChtMSkKKysJCU9QRU5TU0xfZnJlZShtMSk7Cisr CWlmIChtMikKKysJCU9QRU5TU0xfZnJlZShtMik7CisrCWlmIChtMykKKysJCU9QRU5TU0xfZnJl ZShtMyk7CisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJcmV0dXJuIHJldDsK KysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfdXRsLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwu aAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oLmZpcHMJMjAx MC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9maXBzL2NhdnMvZmlwc191dGwuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAorQEAgLTAsMCArMSwzNDMgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKyt2b2lk IGRvX3ByaW50X2Vycm9ycyh2b2lkKQorKwl7CisrCWNvbnN0IGNoYXIgKmZpbGUsICpkYXRhOwor KwlpbnQgbGluZSwgZmxhZ3M7CisrCXVuc2lnbmVkIGxvbmcgbDsKKysJd2hpbGUgKChsID0gRVJS X2dldF9lcnJvcl9saW5lX2RhdGEoJmZpbGUsICZsaW5lLCAmZGF0YSwgJmZsYWdzKSkpCisrCQl7 CisrCQlmcHJpbnRmKHN0ZGVyciwgIkVSUk9SOiVseDpsaWI9JWQsZnVuYz0lZCxyZWFzb249JWQi CisrCQkJCSI6ZmlsZT0lczpsaW5lPSVkOiVzXG4iLAorKwkJCWwsIEVSUl9HRVRfTElCKGwpLCBF UlJfR0VUX0ZVTkMobCksIEVSUl9HRVRfUkVBU09OKGwpLAorKwkJCWZpbGUsIGxpbmUsIGZsYWdz ICYgRVJSX1RYVF9TVFJJTkcgPyBkYXRhIDogIiIpOworKwkJfQorKwl9CisrCisraW50IGhleDJi aW4oY29uc3QgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQg bjEsIG4yOworKyAgICB1bnNpZ25lZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4xPTAsbjI9MCA7 IGluW24xXSAmJiBpbltuMV0gIT0gJ1xuJyA7ICkKKysJeyAvKiBmaXJzdCBieXRlICovCisrCWlm ICgoaW5bbjFdID49ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQorKwkgICAgY2ggPSBpbltuMSsr XSAtICcwJzsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkK KysJICAgIGNoID0gaW5bbjErK10gLSAnQScgKyAxMDsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAn YScpICYmIChpbltuMV0gPD0gJ2YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsK KysJZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwlpZighaW5bbjFdKQorKwkgICAgeworKwkgICAg b3V0W24yKytdPWNoOworKwkgICAgYnJlYWs7CisrCSAgICB9CisrCW91dFtuMl0gPSBjaCA8PCA0 OworKwkvKiBzZWNvbmQgYnl0ZSAqLworKwlpZiAoKGluW24xXSA+PSAnMCcpICYmIChpbltuMV0g PD0gJzknKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnMCc7CisrCWVsc2UgaWYgKChpbltuMV0g Pj0gJ0EnKSAmJiAoaW5bbjFdIDw9ICdGJykpCisrCSAgICBjaCA9IGluW24xKytdIC0gJ0EnICsg MTA7CisrCWVsc2UgaWYgKChpbltuMV0gPj0gJ2EnKSAmJiAoaW5bbjFdIDw9ICdmJykpCisrCSAg ICBjaCA9IGluW24xKytdIC0gJ2EnICsgMTA7CisrCWVsc2UKKysJICAgIHJldHVybiAtMTsKKysJ b3V0W24yKytdIHw9IGNoOworKwl9CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKworK3Vuc2ln bmVkIGNoYXIgKmhleDJiaW5fbShjb25zdCBjaGFyICppbiwgbG9uZyAqcGxlbikKKysJeworKwl1 bnNpZ25lZCBjaGFyICpwOworKwlwID0gT1BFTlNTTF9tYWxsb2MoKHN0cmxlbihpbikgKyAxKS8y KTsKKysJKnBsZW4gPSBoZXgyYmluKGluLCBwKTsKKysJcmV0dXJuIHA7CisrCX0KKysKKytpbnQg ZG9faGV4MmJuKEJJR05VTSAqKnByLCBjb25zdCBjaGFyICppbikKKysJeworKwl1bnNpZ25lZCBj aGFyICpwOworKwlsb25nIHBsZW47CisrCWludCByID0gMDsKKysJcCA9IGhleDJiaW5fbShpbiwg JnBsZW4pOworKwlpZiAoIXApCisrCQlyZXR1cm4gMDsKKysJaWYgKCEqcHIpCisrCQkqcHIgPSBC Tl9uZXcoKTsKKysJaWYgKCEqcHIpCisrCQlyZXR1cm4gMDsKKysJaWYgKEJOX2JpbjJibihwLCBw bGVuLCAqcHIpKQorKwkJciA9IDE7CisrCU9QRU5TU0xfZnJlZShwKTsKKysJcmV0dXJuIHI7Cisr CX0KKysKKytpbnQgZG9fYm5fcHJpbnQoRklMRSAqb3V0LCBCSUdOVU0gKmJuKQorKwl7CisrCWlu dCBsZW4sIGk7CisrCXVuc2lnbmVkIGNoYXIgKnRtcDsKKysJbGVuID0gQk5fbnVtX2J5dGVzKGJu KTsKKysJaWYgKGxlbiA9PSAwKQorKwkJeworKwkJZnB1dHMoIjAwIiwgb3V0KTsKKysJCXJldHVy biAxOworKwkJfQorKworKwl0bXAgPSBPUEVOU1NMX21hbGxvYyhsZW4pOworKwlpZiAoIXRtcCkK KysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3JcbiIpOwor KwkJcmV0dXJuIDA7CisrCQl9CisrCUJOX2JuMmJpbihibiwgdG1wKTsKKysJZm9yIChpID0gMDsg aSA8IGxlbjsgaSsrKQorKwkJZnByaW50ZihvdXQsICIlMDJ4IiwgdG1wW2ldKTsKKysJT1BFTlNT TF9mcmVlKHRtcCk7CisrCXJldHVybiAxOworKwl9CisrCisraW50IGRvX2JuX3ByaW50X25hbWUo RklMRSAqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBCSUdOVU0gKmJuKQorKwl7CisrCWludCByOwor KwlmcHJpbnRmKG91dCwgIiVzID0gIiwgbmFtZSk7CisrCXIgPSBkb19ibl9wcmludChvdXQsIGJu KTsKKysJaWYgKCFyKQorKwkJcmV0dXJuIDA7CisrCWZwdXRzKCJcbiIsIG91dCk7CisrCXJldHVy biAxOworKwl9CisrCisraW50IHBhcnNlX2xpbmUoY2hhciAqKnBrdywgY2hhciAqKnB2YWwsIGNo YXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQorKwl7CisrCWNoYXIgKmtleXdvcmQsICp2YWx1 ZSwgKnAsICpxOworKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwlrZXl3b3JkID0gbGlu ZWJ1ZjsKKysJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSprZXl3b3JkKSkKKysJCWtleXdvcmQrKzsKKysKKysJLyogTG9vayBmb3IgPSBz aWduICovCisrCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJLyogSWYgbm8gJz0nIGV4 aXQgKi8KKysJaWYgKCFwKQorKwkJcmV0dXJuIDA7CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyog UmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFy KSpxKSkKKysJCSpxLS0gPSAwOworKworKwkqcCA9IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisr CS8qIFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2Uo KHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJCXZhbHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSBmcm9tIHZhbHVlICovCisrCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAx OworKworKwl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkK KysJCSpwLS0gPSAwOworKworKwkqcGt3ID0ga2V5d29yZDsKKysJKnB2YWwgPSB2YWx1ZTsKKysJ cmV0dXJuIDE7CisrCX0KKysKKytCSUdOVU0gKmhleDJibihjb25zdCBjaGFyICppbikKKysgICAg eworKyAgICBCSUdOVU0gKnA9TlVMTDsKKysKKysgICAgaWYgKCFkb19oZXgyYm4oJnAsIGluKSkK KysJcmV0dXJuIE5VTEw7CisrCisrICAgIHJldHVybiBwOworKyAgICB9CisrCisraW50IGJpbjJo ZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFyICpvdXQpCisrICAgIHsKKysg ICAgaW50IG4xLCBuMjsKKysgICAgdW5zaWduZWQgY2hhciBjaDsKKysKKysgICAgZm9yIChuMT0w LG4yPTAgOyBuMSA8IGxlbiA7ICsrbjEpCisrCXsKKysJY2g9aW5bbjFdID4+IDQ7CisrCWlmIChj aCA8PSAweDA5KQorKwkgICAgb3V0W24yKytdPWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24y KytdPWNoLTEwKydhJzsKKysJY2g9aW5bbjFdICYgMHgwZjsKKysJaWYoY2ggPD0gMHgwOSkKKysJ ICAgIG91dFtuMisrXT1jaCsnMCc7CisrCWVsc2UKKysJICAgIG91dFtuMisrXT1jaC0xMCsnYSc7 CisrCX0KKysgICAgb3V0W24yXT0nXDAnOworKyAgICByZXR1cm4gbjI7CisrICAgIH0KKysKKyt2 b2lkIHB2KGNvbnN0IGNoYXIgKnRhZyxjb25zdCB1bnNpZ25lZCBjaGFyICp2YWwsaW50IGxlbikK KysgICAgeworKyAgICBjaGFyIG9idWZbMjA0OF07CisrCisrICAgIGJpbjJoZXgodmFsLGxlbixv YnVmKTsKKysgICAgcHJpbnRmKCIlcyA9ICVzXG4iLHRhZyxvYnVmKTsKKysgICAgfQorKworKy8q IFRvIGF2b2lkIGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRlc3QgcHJvZ3JhbSBhdCB0aGlzIHN0YWdl IGp1c3QgY29udmVydAorKyAqIHRoZSBpbnB1dCBsaW5lIGludG8gYW4gYWNjZXB0YWJsZSBmb3Jt LiBLZXl3b3JkIGxpbmVzIGNvbnZlcnRlZCB0byBmb3JtCisrICogImtleXdvcmQgPSB2YWx1ZVxu IiBubyBtYXR0ZXIgd2hhdCB3aGl0ZSBzcGFjZSBwcmVzZW50LCBhbGwgb3RoZXIgbGluZXMKKysg KiBqdXN0IGhhdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2UgcmVtb3ZlZC4KKysgKi8KKysK KytpbnQgdGlkeV9saW5lKGNoYXIgKmxpbmVidWYsIGNoYXIgKm9saW5lYnVmKQorKwl7CisrCWNo YXIgKmtleXdvcmQsICp2YWx1ZSwgKnAsICpxOworKwlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYp OworKwlrZXl3b3JkID0gbGluZWJ1ZjsKKysJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisrCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCWtleXdvcmQrKzsKKysJ LyogTG9vayBmb3IgPSBzaWduICovCisrCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJ LyogSWYgbm8gJz0nIGp1c3QgY2hvcCBsZWFkaW5nLCB0cmFpbGluZyB3cyAqLworKwlpZiAoIXAp CisrCQl7CisrCQlwID0ga2V5d29yZCArIHN0cmxlbihrZXl3b3JkKSAtIDE7CisrCQl3aGlsZSAo KnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCQkqcC0tID0gMDsK KysJCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7CisrCQlzdHJjYXQob2xpbmVidWYsICJcbiIp OworKwkJcmV0dXJuIDE7CisrCQl9CisrCisrCXEgPSBwIC0gMTsKKysKKysJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlICovCisrCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKKysJ CSpxLS0gPSAwOworKworKwkqcCA9IDA7CisrCXZhbHVlID0gcCArIDE7CisrCisrCS8qIFJlbW92 ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVk IGNoYXIpKnZhbHVlKSkKKysJCXZhbHVlKys7CisrCisrCS8qIFJlbW92ZSB0cmFpbGluZyBzcGFj ZSBmcm9tIHZhbHVlICovCisrCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwl3 aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKKysJCSpwLS0g PSAwOworKworKwlzdHJjcHkob2xpbmVidWYsIGtleXdvcmQpOworKwlzdHJjYXQob2xpbmVidWYs ICIgPSAiKTsKKysJc3RyY2F0KG9saW5lYnVmLCB2YWx1ZSk7CisrCXN0cmNhdChvbGluZWJ1Ziwg IlxuIik7CisrCisrCXJldHVybiAxOworKwl9CisrCisrLyogTkI6IHRoaXMgcmV0dXJuIHRoZSBu dW1iZXIgb2YgX2JpdHNfIHJlYWQgKi8KKytpbnQgYmludDJiaW4oY29uc3QgY2hhciAqaW4sIGlu dCBsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKKysgICAgeworKyAgICBpbnQgbjsKKysKKysgICAg bWVtc2V0KG91dCwwLGxlbik7CisrICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQorKwlpZihp bltuXSA9PSAnMScpCisrCSAgICBvdXRbbi84XXw9KDB4ODAgPj4gKG4lOCkpOworKyAgICByZXR1 cm4gbGVuOworKyAgICB9CisrCisraW50IGJpbjJiaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu LGludCBsZW4sY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuOworKworKyAgICBmb3Iobj0w IDsgbiA8IGxlbiA7ICsrbikKKysJb3V0W25dPShpbltuLzhdJigweDgwID4+IChuJTgpKSkgPyAn MScgOiAnMCc7CisrICAgIHJldHVybiBuOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrdm9pZCBQcmludFZhbHVlKGNo YXIgKnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuKQorK3sKKysjaWYgVkVSQk9TRQor KyAgY2hhciBvYnVmWzIwNDhdOworKyAgaW50IG9sZW47CisrICBvbGVuID0gYmluMmhleCh2YWws IGxlbiwgb2J1Zik7CisrICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsK KysjZW5kaWYKKyt9CisrCisrdm9pZCBPdXRwdXRWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVkIGNo YXIgKnZhbCwgaW50IGxlbiwgRklMRSAqcmZwLGludCBiaXRtb2RlKQorKyAgICB7CisrICAgIGNo YXIgb2J1ZlsyMDQ4XTsKKysgICAgaW50IG9sZW47CisrCisrICAgIGlmKGJpdG1vZGUpCisrCW9s ZW49YmluMmJpbnQodmFsLGxlbixvYnVmKTsKKysgICAgZWxzZQorKwlvbGVuPWJpbjJoZXgodmFs LGxlbixvYnVmKTsKKysKKysgICAgZnByaW50ZihyZnAsICIlcyA9ICUuKnNcbiIsIHRhZywgb2xl biwgb2J1Zik7CisrI2lmIFZFUkJPU0UKKysgICAgcHJpbnRmKCIlcyA9ICUuKnNcbiIsIHRhZywg b2xlbiwgb2J1Zik7CisrI2VuZGlmCisrICAgIH0KKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHNfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2Vyci5jCist LS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19lcnIuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6 NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19lcnIuYwky MDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw3IEBACisrI2lu Y2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr IyBpbmNsdWRlICJmaXBzX2Vyci5oIgorKyNlbHNlCisrc3RhdGljIHZvaWQgKmR1bW15PSZkdW1t eTsKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHNfZXJyLmguZmlw cyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2Vyci5oCistLS0gb3BlbnNzbC0xLjAuMC9jcnlw dG8vZmlwc19lcnIuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19lcnIuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAw MDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMzcgQEAKKysvKiBjcnlwdG8vZmlwc19lcnIuaCAq LworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDcgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIG9wZW5zc2wtY29yZUBPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91 bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoK KysgKi8KKysKKysvKiBOT1RFOiB0aGlzIGZpbGUgd2FzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBt a2Vyci5wbCBzY3JpcHQ6IGFueSBjaGFuZ2VzCisrICogbWFkZSB0byBpdCB3aWxsIGJlIG92ZXJ3 cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBuZXh0IHVwZGF0ZXMgdGhpcyBmaWxlLAorKyAqIG9ubHkg cmVhc29uIHN0cmluZ3Mgd2lsbCBiZSBwcmVzZXJ2ZWQuCisrICovCisrCisrI2luY2x1ZGUgPHN0 ZGlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKworKy8qIEJFR0lOIEVSUk9SIENPREVTICovCisrI2lmbmRlZiBPUEVOU1NMX05PX0VS UgorKworKyNkZWZpbmUgRVJSX0ZVTkMoZnVuYykgRVJSX1BBQ0soRVJSX0xJQl9GSVBTLGZ1bmMs MCkKKysjZGVmaW5lIEVSUl9SRUFTT04ocmVhc29uKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsMCxy ZWFzb24pCisrCisrc3RhdGljIEVSUl9TVFJJTkdfREFUQSBGSVBTX3N0cl9mdW5jdHNbXT0KKysJ eworK3tFUlJfRlVOQyhGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhfQlVJTFRJTl9H RU5QQVJBTVMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwJIkRT QV9CVUlMVElOX1BBUkFNR0VOIn0sCisre0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9fU0lHTiksCSJE U0FfZG9fc2lnbiJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0RPX1ZFUklGWSksCSJEU0FfZG9f dmVyaWZ5In0sCisre0VSUl9GVU5DKEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCksCSJFVlBfQ2lw aGVySW5pdF9leCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgpLAkiRVZQ X0RpZ2VzdEluaXRfZXgifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfRFNBKSwJIkZJ UFNfQ0hFQ0tfRFNBIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5H RVJQUklOVCksCSJGSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCJ9LAorK3tFUlJfRlVOQyhG SVBTX0ZfRklQU19DSEVDS19SU0EpLAkiRklQU19DSEVDS19SU0EifSwKKyt7RVJSX0ZVTkMoRklQ U19GX0ZJUFNfRFNBX0NIRUNLKSwJIkZJUFNfRFNBX0NIRUNLIn0sCisre0VSUl9GVU5DKEZJUFNf Rl9GSVBTX01PREVfU0VUKSwJIkZJUFNfbW9kZV9zZXQifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJ UFNfUEtFWV9TSUdOQVRVUkVfVEVTVCksCSJmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QifSwKKyt7 RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTKSwJIkZJUFNfc2VsZnRlc3RfYWVzIn0s Cisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RFUyksCSJGSVBTX3NlbGZ0ZXN0X2Rl cyJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EpLAkiRklQU19zZWxmdGVz dF9kc2EifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyksCSJGSVBTX3Nl bGZ0ZXN0X2htYWMifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HKSwJIkZJ UFNfc2VsZnRlc3Rfcm5nIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEp LAkiRklQU19zZWxmdGVzdF9zaGExIn0sCisre0VSUl9GVU5DKEZJUFNfRl9IQVNIX0ZJTkFMKSwJ IkhBU0hfRklOQUwifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiksCSJS U0FfQlVJTFRJTl9LRVlHRU4ifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFJJVkFURV9E RUNSWVBUKSwJIlJTQV9FQVlfUFJJVkFURV9ERUNSWVBUIn0sCisre0VSUl9GVU5DKEZJUFNfRl9S U0FfRUFZX1BSSVZBVEVfRU5DUllQVCksCSJSU0FfRUFZX1BSSVZBVEVfRU5DUllQVCJ9LAorK3tF UlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCksCSJSU0FfRUFZX1BVQkxJQ19E RUNSWVBUIn0sCisre0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUKSwJIlJT QV9FQVlfUFVCTElDX0VOQ1JZUFQifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9YOTMxX0dFTkVS QVRFX0tFWV9FWCksCSJSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgifSwKKyt7RVJSX0ZVTkMoRklQ U19GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZVEVTIn0sCisrezAsTlVMTH0K KysJfTsKKysKKytzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNfc3RyX3JlYXNvbnNbXT0KKysJ eworK3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUpICAgICAgLCJjYW5ub3QgcmVh ZCBleGUifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVCksImNh bm5vdCByZWFkIGV4ZSBkaWdlc3QifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfQ09OVFJBRElDVElO R19FVklERU5DRSksImNvbnRyYWRpY3RpbmcgZXZpZGVuY2UifSwKKyt7RVJSX1JFQVNPTihGSVBT X1JfRVhFX0RJR0VTVF9ET0VTX05PVF9NQVRDSCksImV4ZSBkaWdlc3QgZG9lcyBub3QgbWF0Y2gi fSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpLCJmaW5n ZXJwcmludCBkb2VzIG5vdCBtYXRjaCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklO VF9ET0VTX05PVF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEKSwiZmluZ2VycHJpbnQgZG9lcyBub3Qg bWF0Y2ggbm9ucGljIHJlbG9jYXRlZCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklO VF9ET0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HKSwiZmluZ2VycHJpbnQgZG9lcyBub3Qg bWF0Y2ggc2VnbWVudCBhbGlhc2luZyJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSVBTX01PREVf QUxSRUFEWV9TRVQpLCJmaXBzIG1vZGUgYWxyZWFkeSBzZXQifSwKKyt7RVJSX1JFQVNPTihGSVBT X1JfRklQU19TRUxGVEVTVF9GQUlMRUQpICwiZmlwcyBzZWxmdGVzdCBmYWlsZWQifSwKKyt7RVJS X1JFQVNPTihGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKSAgICwiaW52YWxpZCBrZXkgbGVuZ3Ro In0sCisre0VSUl9SRUFTT04oRklQU19SX0tFWV9UT09fU0hPUlQpICAgICAgICAsImtleSB0b28g c2hvcnQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKSAgICAgICwibm9u IGZpcHMgbWV0aG9kIn0sCisre0VSUl9SRUFTT04oRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVE KSAsInBhaXJ3aXNlIHRlc3QgZmFpbGVkIn0sCisre0VSUl9SRUFTT04oRklQU19SX1JTQV9ERUNS WVBUX0VSUk9SKSAgICAsInJzYSBkZWNyeXB0IGVycm9yIn0sCisre0VSUl9SRUFTT04oRklQU19S X1JTQV9FTkNSWVBUX0VSUk9SKSAgICAsInJzYSBlbmNyeXB0IGVycm9yIn0sCisre0VSUl9SRUFT T04oRklQU19SX1NFTEZURVNUX0ZBSUxFRCkgICAgICAsInNlbGZ0ZXN0IGZhaWxlZCJ9LAorK3tF UlJfUkVBU09OKEZJUFNfUl9URVNUX0ZBSUxVUkUpICAgICAgICAgLCJ0ZXN0IGZhaWx1cmUifSwK Kyt7RVJSX1JFQVNPTihGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pICwidW5zdXBwb3J0ZWQg cGxhdGZvcm0ifSwKKyt7MCxOVUxMfQorKwl9OworKworKyNlbmRpZgorKworK3ZvaWQgRVJSX2xv YWRfRklQU19zdHJpbmdzKHZvaWQpCisrCXsKKysjaWZuZGVmIE9QRU5TU0xfTk9fRVJSCisrCisr CWlmIChFUlJfZnVuY19lcnJvcl9zdHJpbmcoRklQU19zdHJfZnVuY3RzWzBdLmVycm9yKSA9PSBO VUxMKQorKwkJeworKwkJRVJSX2xvYWRfc3RyaW5ncygwLEZJUFNfc3RyX2Z1bmN0cyk7CisrCQlF UlJfbG9hZF9zdHJpbmdzKDAsRklQU19zdHJfcmVhc29ucyk7CisrCQl9CisrI2VuZGlmCisrCX0K K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYworLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzX2Flc19zZWxmdGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAw CitAQCAtMCwwICsxLDEwMyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgc3RydWN0Cisr ICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIHBs YWludGV4dFsxNl07CisrICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxNl07CisrICAgIH0g dGVzdHNbXT0KKysJeworKwl7CisrCXsgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgw NiwweDA3LAorKwkgIDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiB9LAor Kwl7IDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywKKysJICAweDg4LDB4 OTksMHhBQSwweEJCLDB4Q0MsMHhERCwweEVFLDB4RkYgfSwKKysJeyAweDY5LDB4QzQsMHhFMCww eEQ4LDB4NkEsMHg3QiwweDA0LDB4MzAsCisrCSAgMHhEOCwweENELDB4QjcsMHg4MCwweDcwLDB4 QjQsMHhDNSwweDVBIH0sCisrCX0sCisrCX07CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkK KysgICAgeworKyAgICB0ZXN0c1swXS5rZXlbMF0rKzsKKysgICAgfQorKworK2ludCBGSVBTX3Nl bGZ0ZXN0X2FlcygpCisrICAgIHsKKysgICAgaW50IG47CisrICAgIGludCByZXQgPSAwOworKyAg ICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Cisr CisrICAgIGZvcihuPTAgOyBuIDwgMSA7ICsrbikKKysJeworKwlpZiAoZmlwc19jaXBoZXJfdGVz dCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwKKysJCQkJdGVzdHNbbl0ua2V5LCBOVUxMLAorKwkJ CQl0ZXN0c1tuXS5wbGFpbnRleHQsCisrCQkJCXRlc3RzW25dLmNpcGhlcnRleHQsCisrCQkJCTE2 KSA8PSAwKQorKwkJZ290byBlcnI7CisrCX0KKysgICAgcmV0ID0gMTsKKysgICAgZXJyOgorKyAg ICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKyAgICBpZiAocmV0ID09IDApCisrCSAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVE KTsKKysgICAgcmV0dXJuIHJldDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2Zp cHMuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMJMjAxMC0wMy0z MCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2ZpcHMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0 MTkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysKKysjaW5jbHVkZSA8b3BlbnNz bC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrI2lm bmRlZiBQQVRIX01BWAorKyNkZWZpbmUgUEFUSF9NQVggMTAyNAorKyNlbmRpZgorKworK3N0YXRp YyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsOworK3N0YXRpYyBpbnQgZmlwc19tb2RlOworK3N0YXRp YyBjb25zdCB2b2lkICpmaXBzX3JhbmRfY2hlY2s7CisrCisrc3RhdGljIHZvaWQgZmlwc19zZXRf bW9kZShpbnQgb25vZmYpCisrCXsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmlu Z190aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJaWYgKCFv d25pbmdfdGhyZWFkKSBmaXBzX3dfbG9jaygpOworKwkJZmlwc19tb2RlID0gb25vZmY7CisrCQlp ZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKKysJCX0KKysJfQorKworK3N0YXRp YyB2b2lkIGZpcHNfc2V0X3JhbmRfY2hlY2soY29uc3Qgdm9pZCAqcmFuZF9jaGVjaykKKysJewor KwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOworKworKwlpZiAo Zmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfd19s b2NrKCk7CisrCQlmaXBzX3JhbmRfY2hlY2sgPSByYW5kX2NoZWNrOworKwkJaWYgKCFvd25pbmdf dGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7CisrCQl9CisrCX0KKysKKytpbnQgRklQU19tb2RlKHZv aWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19v d25pbmdfdGhyZWFkKCk7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCWlm ICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKKysJCXJldCA9IGZpcHNfbW9kZTsKKysJ CWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwkJfQorKwlyZXR1cm4gcmV0 OworKwl9CisrCisrY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQpCisrCXsKKysJY29u c3Qgdm9pZCAqcmV0ID0gMDsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190 aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJaWYgKCFvd25p bmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwkJcmV0ID0gZmlwc19yYW5kX2NoZWNrOworKwkJ aWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7CisrCQl9CisrCXJldHVybiByZXQ7 CisrCX0KKysKKytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCkKKysgICAgeworKyAgICBp bnQgcmV0ID0gMDsKKysgICAgaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwl7CisrCWludCBvd25p bmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7CisrCisrCWlmICghb3duaW5nX3Ro cmVhZCkgZmlwc19yX2xvY2soKTsKKysJcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOworKwlpZiAo IW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKKysJfQorKyAgICByZXR1cm4gcmV0Owor KyAgICB9CisrCisrLyogU2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRpbmUuIFRoaXMg d2lsbCBiZSBjYWxsZWQKKysgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24u IEl0IGhhcyB0aGUgbWluaW11bQorKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2b2lkIHRvbyBi aWcgYSBwZXJmb3JtYW5jZSBoaXQuCisrICovCisrCisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNr KHZvaWQpCisrICAgIHsKKysgICAgaWYgKGZpcHNfc2VsZnRlc3RfZmFpbCkKKysJeworKwlPcGVu U1NMRGllKF9fRklMRV9fLF9fTElORV9fLCAiRkFUQUwgRklQUyBTRUxGVEVTVCBGQUlMVVJFIik7 CisrCX0KKysgICAgfQorKworK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKQorKyAg ICB7CisrICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrICAgIH0KKysKKytpbnQgRklQU19z ZWxmdGVzdCgpCisrICAgIHsKKysKKysgICAgcmV0dXJuIEZJUFNfc2VsZnRlc3Rfc2hhMSgpCisr CSYmIEZJUFNfc2VsZnRlc3RfaG1hYygpCisrCSYmIEZJUFNfc2VsZnRlc3RfYWVzKCkKKysJJiYg RklQU19zZWxmdGVzdF9kZXMoKQorKwkmJiBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisrCSYmIEZJUFNf c2VsZnRlc3RfZHNhKCk7CisrICAgIH0KKysKKytpbnQgRklQU19tb2RlX3NldChpbnQgb25vZmYp CisrICAgIHsKKysgICAgaW50IGZpcHNfc2V0X293bmluZ190aHJlYWQoKTsKKysgICAgaW50IGZp cHNfY2xlYXJfb3duaW5nX3RocmVhZCgpOworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgZmlw c193X2xvY2soKTsKKysgICAgZmlwc19zZXRfc3RhcnRlZCgpOworKyAgICBmaXBzX3NldF9vd25p bmdfdGhyZWFkKCk7CisrCisrICAgIGlmKG9ub2ZmKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgYnVm WzQ4XTsKKysKKysJZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKysKKysJLyogRG9uJ3QgZ28gaW50 byBGSVBTIG1vZGUgdHdpY2UsIGp1c3Qgc28gd2UgY2FuIGRvIGF1dG9tYWdpYworKwkgICBzZWVk aW5nICovCisrCWlmKEZJUFNfbW9kZSgpKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0Zf RklQU19NT0RFX1NFVCxGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKKysJICAgIGZpcHNf c2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAg ICB9CisrCisrI2lmZGVmIE9QRU5TU0xfSUEzMl9TU0UyCisrCWlmICgoT1BFTlNTTF9pYTMyY2Fw ICYgKDE8PDI1fDE8PDI2KSkgIT0gKDE8PDI1fDE8PDI2KSkKKysJICAgIHsKKysJICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNKTsKKysJ ICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBl bmQ7CisrCSAgICB9CisrI2VuZGlmCisrCisrCS8qIFBlcmZvcm0gUk5HIEtBVCBiZWZvcmUgc2Vl ZGluZyAqLworKwlpZiAoIUZJUFNfc2VsZnRlc3Rfcm5nKCkpCisrCSAgICB7CisrCSAgICBmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkgICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkg ICAgfQorKworKwkvKiBhdXRvbWFnaWNhbGx5IHNlZWQgUFJORyBpZiBub3QgYWxyZWFkeSBzZWVk ZWQgKi8KKysJaWYoIUZJUFNfcmFuZF9zdGF0dXMoKSkKKysJICAgIHsKKysJICAgIGlmKFJBTkRf Ynl0ZXMoYnVmLHNpemVvZiBidWYpIDw9IDApCisrCQl7CisrCQlmaXBzX3NlbGZ0ZXN0X2ZhaWwg PSAxOworKwkJcmV0ID0gMDsKKysJCWdvdG8gZW5kOworKwkJfQorKwkgICAgRklQU19yYW5kX3Nl dF9rZXkoYnVmLDMyKTsKKysJICAgIEZJUFNfcmFuZF9zZWVkKGJ1ZiszMiwxNik7CisrCSAgICB9 CisrCisrCS8qIG5vdyBzd2l0Y2ggaW50byBGSVBTIG1vZGUgKi8KKysJZmlwc19zZXRfcmFuZF9j aGVjayhGSVBTX3JhbmRfbWV0aG9kKCkpOworKwlSQU5EX3NldF9yYW5kX21ldGhvZChGSVBTX3Jh bmRfbWV0aG9kKCkpOworKwlpZihGSVBTX3NlbGZ0ZXN0KCkpCisrCSAgICBmaXBzX3NldF9tb2Rl KDEpOworKwllbHNlCisrCSAgICB7CisrCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKwkg ICAgcmV0ID0gMDsKKysJICAgIGdvdG8gZW5kOworKwkgICAgfQorKwlyZXQgPSAxOworKwlnb3Rv IGVuZDsKKysJfQorKyAgICBmaXBzX3NldF9tb2RlKDApOworKyAgICBmaXBzX3NlbGZ0ZXN0X2Zh aWwgPSAwOworKyAgICByZXQgPSAxOworK2VuZDoKKysgICAgZmlwc19jbGVhcl9vd25pbmdfdGhy ZWFkKCk7CisrICAgIGZpcHNfd191bmxvY2soKTsKKysgICAgcmV0dXJuIHJldDsKKysgICAgfQor KworK3ZvaWQgZmlwc193X2xvY2sodm9pZCkJCXsgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19G SVBTKTsgfQorK3ZvaWQgZmlwc193X3VubG9jayh2b2lkKQl7IENSWVBUT193X3VubG9jayhDUllQ VE9fTE9DS19GSVBTKTsgfQorK3ZvaWQgZmlwc19yX2xvY2sodm9pZCkJCXsgQ1JZUFRPX3JfbG9j ayhDUllQVE9fTE9DS19GSVBTKTsgfQorK3ZvaWQgZmlwc19yX3VubG9jayh2b2lkKQl7IENSWVBU T19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTKTsgfQorKworK3N0YXRpYyBpbnQgZmlwc19zdGFy dGVkID0gMDsKKytzdGF0aWMgdW5zaWduZWQgbG9uZyBmaXBzX3RocmVhZCA9IDA7CisrCisrdm9p ZCBmaXBzX3NldF9zdGFydGVkKHZvaWQpCisrCXsKKysJZmlwc19zdGFydGVkID0gMTsKKysJfQor KworK2ludCBmaXBzX2lzX3N0YXJ0ZWQodm9pZCkKKysJeworKwlyZXR1cm4gZmlwc19zdGFydGVk OworKwl9CisrCisraW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCBy ZXQgPSAwOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlDUllQVE9fcl9s b2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVhZCAhPSAwICYmIGZpcHNf dGhyZWFkID09IENSWVBUT190aHJlYWRfaWQoKSkKKysJCQlyZXQgPSAxOworKwkJQ1JZUFRPX3Jf dW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJfQorKwor K2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7Cisr CisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCUNSWVBUT193X2xvY2soQ1JZUFRP X0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhyZWFkID09IDApCisrCQkJeworKwkJCWZpcHNf dGhyZWFkID0gQ1JZUFRPX3RocmVhZF9pZCgpOworKwkJCXJldCA9IDE7CisrCQkJfQorKwkJQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCX0KKysJcmV0dXJuIHJldDsKKysJ fQorKworK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkKKysJeworKwlpbnQgcmV0 ID0gMDsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJQ1JZUFRPX3dfbG9j ayhDUllQVE9fTE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWQgPT0gQ1JZUFRPX3RocmVh ZF9pZCgpKQorKwkJCXsKKysJCQlmaXBzX3RocmVhZCA9IDA7CisrCQkJcmV0ID0gMTsKKysJCQl9 CisrCQlDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4g cmV0OworKwl9CisrCisrLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0ZXN0IHJvdXRpbmUuIFNp Z25zIGFuZCB2ZXJpZmllcyB0aGUgZGF0YQorKyAqIHN1cHBsaWVkIGluIHRicyB1c2luZyBtZXNh Z2UgZGlnZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKKysgKiBmbGFncyBtZF9mbGFn cy4gSWYgdGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3aWxsCisrICogYWRkaXRp b25hbGx5IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBrbm93biBhbnN3ZXIgdGVz dAorKyAqIFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBpZGVudGlmaWNhdGlvbiBw dXJwb3NlcyBpbiBjYXNlCisrICogb2YgZmFpbHVyZS4KKysgKi8KKysKKytpbnQgZmlwc19wa2V5 X3NpZ25hdHVyZV90ZXN0KEVWUF9QS0VZICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIg KnRicywgaW50IHRic2xlbiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVk IGludCBrYXRsZW4sCisrCQkJY29uc3QgRVZQX01EICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9m bGFncywKKysJCQljb25zdCBjaGFyICpmYWlsX3N0cikKKysJewkKKysJaW50IHJldCA9IDA7Cisr CXVuc2lnbmVkIGNoYXIgc2lndG1wWzI1Nl0sICpzaWcgPSBzaWd0bXA7CisrCXVuc2lnbmVkIGlu dCBzaWdsZW47CisrCUVWUF9NRF9DVFggbWN0eDsKKysJRVZQX01EX0NUWF9pbml0KCZtY3R4KTsK KysKKysJaWYgKChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKKysJCSYmIChSU0Ffc2l6ZShw a2V5LT5wa2V5LnJzYSkgPiBzaXplb2Yoc2lndG1wKSkpCisrCQl7CisrCQlzaWcgPSBPUEVOU1NM X21hbGxvYyhSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkpOworKwkJaWYgKCFzaWcpCisrCQkJewor KwkJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxFUlJfUl9NQUxMT0Nf RkFJTFVSRSk7CisrCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKworKwlpZiAodGJzbGVuID09 IC0xKQorKwkJdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKKysKKysJaWYgKG1kX2ZsYWdz KQorKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdzKTsKKysKKysJaWYgKCFF VlBfU2lnbkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlp ZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCisrCQlnb3RvIGVycm9yOwor KwlpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkpCisrCQlnb3Rv IGVycm9yOworKworKwlpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwgbWVtY21wKGth dCwgc2lnLCBrYXRsZW4pKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCWlmICghRVZQX1ZlcmlmeUlu aXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCisrCQlnb3RvIGVycm9yOworKwlpZiAoIUVWUF9W ZXJpZnlVcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKKysJCWdvdG8gZXJyb3I7CisrCXJldCA9 IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkpOworKworKwllcnJvcjoK KysJaWYgKHNpZyAhPSBzaWd0bXApCisrCQlPUEVOU1NMX2ZyZWUoc2lnKTsKKysJRVZQX01EX0NU WF9jbGVhbnVwKCZtY3R4KTsKKysJaWYgKHJldCAhPSAxKQorKwkJeworKwkJRklQU2VycihGSVBT X0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULEZJUFNfUl9URVNUX0ZBSUxVUkUpOworKwkJaWYg KGZhaWxfc3RyKQorKwkJCUVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBmYWlsX3N0cik7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBHZW5lcmFsaXpl ZCBzeW1tZXRyaWMgY2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2ZXJpZnkgcmVz dWx0CisrICogYWdhaW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBhcmUgd2l0aCBv cmlnaW5hbCBwbGFpbnRleHQuCisrICovCisrCisraW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJ UEhFUl9DVFggKmN0eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmtleSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKysJCQljb25zdCB1 bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVy dGV4dCwKKysJCQlpbnQgbGVuKQorKwl7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBbRklQU19NQVhf Q0lQSEVSX1RFU1RfU0laRV07CisrCXVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19NQVhfQ0lQSEVS X1RFU1RfU0laRV07CisrCU9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9DSVBIRVJfVEVT VF9TSVpFKTsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXks IGl2LCAxKSA8PSAwKQorKwkJcmV0dXJuIDA7CisrCUVWUF9DaXBoZXIoY3R4LCBjaXRtcCwgcGxh aW50ZXh0LCBsZW4pOworKwlpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBsZW4pKQorKwkJ cmV0dXJuIDA7CisrCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5 LCBpdiwgMCkgPD0gMCkKKysJCXJldHVybiAwOworKwlFVlBfQ2lwaGVyKGN0eCwgcGx0bXAsIGNp dG1wLCBsZW4pOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIGxlbikpCisrCQlyZXR1 cm4gMDsKKysJcmV0dXJuIDE7CisrCX0KKysKKysjaWYgMAorKy8qIFRoZSBwdXJwb3NlIG9mIHRo aXMgaXMgdG8gZW5zdXJlIHRoZSBlcnJvciBjb2RlIGV4aXN0cyBhbmQgdGhlIGZ1bmN0aW9uCisr ICogbmFtZSBpcyB0byBrZWVwIHRoZSBlcnJvciBjaGVja2luZyBzY3JpcHQgcXVpZXQKKysgKi8K Kyt2b2lkIGhhc2hfZmluYWwodm9pZCkKKysJeworKwlGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFM LEZJUFNfUl9OT05fRklQU19NRVRIT0QpOworKwl9CisrI2VuZGlmCisrCisrCisrI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVu c3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTAzLTMw IDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Zmlwc19kZXNfc2VsZnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAor QEAgLTAsMCArMSwxMzkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw MyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xf RklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgc3RydWN0CisrICAgIHsKKysgICAgdW5zaWduZWQg Y2hhciBrZXlbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysgICAgdW5z aWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOworKyAgICB9IHRlc3RzMltdPQorKwl7CisrCXsKKysJ eyAweDdjLDB4NGYsMHg2ZSwweGY3LDB4YTIsMHgwNCwweDE2LDB4ZWMsCisrCSAgMHgwYiwweDZi LDB4N2MsMHg5ZSwweDVlLDB4MTksMHhhNywweGM0IH0sCisrCXsgMHgwNiwweGE3LDB4ZDgsMHg3 OSwweGFhLDB4Y2UsMHg2OSwweGVmIH0sCisrCXsgMHg0YywweDExLDB4MTcsMHg1NSwweGJmLDB4 YzQsMHg0ZSwweGZkIH0KKysJfSwKKysJeworKwl7IDB4NWQsMHg5ZSwweDAxLDB4ZDMsMHgyNSww eGM3LDB4M2UsMHgzNCwKKysJICAweDAxLDB4MTYsMHg3YywweDg1LDB4MjMsMHhkZiwweGUwLDB4 NjggfSwKKysJeyAweDljLDB4NTAsMHgwOSwweDBmLDB4NWUsMHg3ZCwweDY5LDB4N2UgfSwKKysJ eyAweGQyLDB4MGIsMHgxOCwweGRmLDB4ZDksMHgwZCwweDllLDB4ZmYgfSwKKysJfQorKwl9Owor KworK3N0YXRpYyBzdHJ1Y3QKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsyNF07Cisr ICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhl cnRleHRbOF07CisrICAgIH0gdGVzdHMzW109CisrCXsKKysJeworKwl7IDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJICAweEZFLDB4REMsMHhCQSwweDk4LDB4NzYs MHg1NCwweDMyLDB4MTAsCisrCSAgMHgxMiwweDM0LDB4NTYsMHg3OCwweDlhLDB4YmMsMHhkZSww eGYwIH0sCisrCXsgMHg4ZiwweDhmLDB4YmYsMHg5YiwweDVkLDB4NDgsMHhiNCwweDFjIH0sCisr CXsgMHg1OSwweDhjLDB4ZTUsMHhkMywweDZjLDB4YTIsMHhlYSwweDFiIH0sCisrCX0sCisrCXsK KysJeyAweERDLDB4QkEsMHg5OCwweDc2LDB4NTQsMHgzMiwweDEwLDB4RkUsCisrCSAgMHgwMSww eDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGLAorKwkgIDB4RUQsMHgzOSwweEQ5LDB4 NTAsMHhGQSwweDc0LDB4QkMsMHhDNCB9LAorKwl7IDB4MDEsMHgyMywweDQ1LDB4NjcsMHg4OSww eEFCLDB4Q0QsMHhFRiB9LAorKwl7IDB4MTEsMHgyNSwweGIwLDB4MzUsMHhiZSwweGEwLDB4ODIs MHg4NiB9LAorKwl9LAorKwl9OworKworK3ZvaWQgRklQU19jb3JydXB0X2RlcygpCisrICAgIHsK KysgICAgdGVzdHMyWzBdLnBsYWludGV4dFswXSsrOworKyAgICB9CisrCisraW50IEZJUFNfc2Vs ZnRlc3RfZGVzKCkKKysgICAgeworKyAgICBpbnQgbiwgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhF Ul9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKyAgICAvKiBFbmNy eXB0L2RlY3J5cHQgd2l0aCAyLWtleSAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMg Ki8KKysgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQorKwl7CisrCWlmICghZmlwc19jaXBoZXJf dGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwKKysJCQkJdGVzdHMyW25dLmtleSwgTlVMTCwK KysJCQkJdGVzdHMyW25dLnBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQorKwkJ Z290byBlcnI7CisrCX0KKysKKysgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RFUyBhbmQg Y29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCisrICAgIGZvcihuPTAgOyBuIDwgMiA7ICsrbikK KysJeworKwlpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAor KwkJCQl0ZXN0czNbbl0ua2V5LCBOVUxMLAorKwkJCQl0ZXN0czNbbl0ucGxhaW50ZXh0LCB0ZXN0 czNbbl0uY2lwaGVydGV4dCwgOCkpCisrCQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOwor KyAgICBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChy ZXQgPT0gMCkKKysJICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTLEZJUFNfUl9T RUxGVEVTVF9GQUlMRUQpOworKworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlw cyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKKy0tLSBvcGVu c3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTAzLTMw IDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Zmlwc19kc2Ffc2VsZnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAor QEAgLTAsMCArMSwxODYgQEAKKysvKiBjcnlwdG8vZHNhL2RzYXRlc3QuYyAqLworKy8qIENvcHly aWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxl bWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSku CisrICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0 aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21t ZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0 aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNT TCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRp c3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4 Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgor KyAqIAorKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55 IENvcHlyaWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVk LgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBz aG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0 cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEg dGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRp b24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAor KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlw dG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNy eXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVm dCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQg YXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRl IGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9t IAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3Qg aW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysg KiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycn IEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICog T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ CisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G IFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNl bmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2 ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQu ICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5k ZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQ dWJsaWMgTGljZW5jZS5dCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrLyogc2VlZCwgb3V0 X3AsIG91dF9xLCBvdXRfZyBhcmUgdGFrZW4gdGhlIE5JU1QgdGVzdCB2ZWN0b3JzICovCisrCisr c3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7CisrCTB4NzcsIDB4OGYsIDB4NDAsIDB4 NzQsIDB4NmYsIDB4NjYsIDB4YmUsIDB4MzMsIDB4Y2UsIDB4YmUsIDB4OTksIDB4MzQsCisrCTB4 NGMsIDB4ZmMsIDB4ZjMsIDB4MjgsIDB4YWEsIDB4NzAsIDB4MmQsIDB4M2EKKysgIAl9OworKwor K3N0YXRpYyB1bnNpZ25lZCBjaGFyIG91dF9wW10gPSB7CisrCTB4ZjcsIDB4N2MsIDB4MWIsIDB4 ODMsIDB4ZDgsIDB4ZTgsIDB4NWMsIDB4N2YsIDB4ODUsIDB4MzAsIDB4MTcsIDB4NTcsCisrCTB4 MjEsIDB4OTUsIDB4ZmUsIDB4MjYsIDB4MDQsIDB4ZWIsIDB4NDcsIDB4NGMsIDB4M2EsIDB4NGEs IDB4ODEsIDB4NGIsCisrCTB4NzEsIDB4MmUsIDB4ZWQsIDB4NmUsIDB4NGYsIDB4M2QsIDB4MTEs IDB4MGYsIDB4N2MsIDB4ZmUsIDB4MzYsIDB4NDMsCisrCTB4NTEsIDB4ZDksIDB4ODEsIDB4Mzks IDB4MTcsIDB4ZGYsIDB4NjIsIDB4ZjYsIDB4OWMsIDB4MDEsIDB4YTgsIDB4NjksCisrCTB4NzEs IDB4ZGQsIDB4MjksIDB4N2YsIDB4NDcsIDB4ZTYsIDB4NjUsIDB4YTYsIDB4MjIsIDB4ZTgsIDB4 NmEsIDB4MTIsCisrCTB4MmIsIDB4YzIsIDB4ODEsIDB4ZmYsIDB4MzIsIDB4NzAsIDB4MmYsIDB4 OWUsIDB4Y2EsIDB4NTMsIDB4MjYsIDB4NDcsCisrCTB4MGYsIDB4NTksIDB4ZDcsIDB4OWUsIDB4 MmMsIDB4YTUsIDB4MDcsIDB4YzQsIDB4NDksIDB4NTIsIDB4YTMsIDB4ZTQsCisrCTB4NmIsIDB4 MDQsIDB4MDAsIDB4MjUsIDB4NDksIDB4ZTIsIDB4ZTYsIDB4N2YsIDB4MjgsIDB4NzgsIDB4OTcs IDB4YjgsCisrCTB4M2EsIDB4MzIsIDB4MTQsIDB4MzgsIDB4YTIsIDB4NTEsIDB4MzMsIDB4MjIs IDB4NDQsIDB4N2UsIDB4ZDcsIDB4ZWYsCisrCTB4NDUsIDB4ZGIsIDB4MDYsIDB4NGEsIDB4ZDIs IDB4ODIsIDB4NGEsIDB4ODIsIDB4MmMsIDB4YjEsIDB4ZDcsIDB4ZDgsCisrCTB4YjYsIDB4NzMs IDB4MDAsIDB4NGQsIDB4OTQsIDB4NzcsIDB4OTQsIDB4ZWYKKysJfTsKKysKKytzdGF0aWMgdW5z aWduZWQgY2hhciBvdXRfcVtdID0geworKwkweGQ0LCAweDBhLCAweGFjLCAweDlmLCAweGJkLCAw eDhjLCAweDgwLCAweGMyLCAweDM4LCAweDdlLCAweDJlLCAweDBjLAorKwkweDUyLCAweDVjLCAw eGVhLCAweDM0LCAweGExLCAweDgzLCAweDMyLCAweGYzCisrCX07CisrCisrc3RhdGljIHVuc2ln bmVkIGNoYXIgb3V0X2dbXSA9IHsKKysJMHgzNCwgMHg3MywgMHg4YiwgMHg1NywgMHg4NCwgMHg4 ZSwgMHg1NSwgMHhiZiwgMHg1NywgMHhjYywgMHg0MSwgMHhiYiwKKysJMHg1ZSwgMHgyYiwgMHhk NSwgMHg0MiwgMHhkZCwgMHgyNCwgMHgyMiwgMHgyYSwgMHgwOSwgMHhlYSwgMHgyNiwgMHgxZSwK KysJMHgxNywgMHg2NSwgMHhjYiwgMHgxYSwgMHhiMywgMHgxMiwgMHg0NCwgMHhhMywgMHg5ZSwg MHg5OSwgMHhlOSwgMHg2MywKKysJMHhlYiwgMHgzMCwgMHhiMSwgMHg3OCwgMHg3YiwgMHgwOSwg MHg0MCwgMHgzMCwgMHhmYSwgMHg4MywgMHhjMiwgMHgzNSwKKysJMHhlMSwgMHhjNCwgMHgyZCwg MHg3NCwgMHgxYSwgMHhiMSwgMHg4MywgMHg1NCwgMHhkOCwgMHgyOSwgMHhmNCwgMHhjZiwKKysJ MHg3ZiwgMHg2ZiwgMHg2NywgMHgxYywgMHgzNiwgMHg0OSwgMHhlZSwgMHg2YywgMHhhMiwgMHgz YywgMHgyZCwgMHg2YSwKKysJMHhlOSwgMHhkMywgMHg5YSwgMHhmNiwgMHg1NywgMHg3OCwgMHg2 ZiwgMHhmZCwgMHgzMywgMHhjZCwgMHgzYywgMHhlZCwKKysJMHhmZCwgMHhkNCwgMHg0MSwgMHhl NiwgMHg1YywgMHg4YiwgMHhlMCwgMHg2OCwgMHgzMSwgMHg0NywgMHg0NywgMHhhZiwKKysJMHgx MiwgMHhhNywgMHhmOSwgMHgzMiwgMHgwZCwgMHg5NCwgMHgxNSwgMHg0OCwgMHhkMCwgMHg1NCwg MHg4NSwgMHhiMiwKKysJMHgwNCwgMHhiNSwgMHg0ZCwgMHhkNCwgMHg5ZCwgMHgwNSwgMHgyMiwg MHgyNSwgMHhkOSwgMHhmZCwgMHg2YywgMHgzNiwKKysJMHhlZiwgMHhiZSwgMHg2OSwgMHg2Yywg MHg1NSwgMHhmNCwgMHhlZSwgMHhlYworKwl9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHN0cjFbXT0iMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOworKworK3ZvaWQgRklQU19jb3JydXB0 X2RzYSgpCisrICAgIHsKKysgICAgKytzZWVkWzBdOworKyAgICB9CisrCisraW50IEZJUFNfc2Vs ZnRlc3RfZHNhKCkKKysgICAgeworKyAgICBEU0EgKmRzYTsKKysgICAgaW50IGNvdW50ZXIsaSxq LCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgdW5zaWduZWQgY2hhciBi dWZbMjU2XTsKKysgICAgdW5zaWduZWQgbG9uZyBoOworKyAgICBFVlBfTURfQ1RYIG1jdHg7Cisr ICAgIEVWUF9QS0VZICpwayA9IE5VTEw7CisrCisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7 CisrCisrICAgIGRzYSA9IERTQV9uZXcoKTsKKysKKysgICAgaWYoZHNhID09IE5VTEwpCisrCWdv dG8gZXJyOworKyAgICBpZighRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LHNl ZWQsMjAsJmNvdW50ZXIsJmgsTlVMTCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoY291bnRlciAh PSAzNzgpIAorKwlnb3RvIGVycjsKKysgICAgaWYgKGggIT0gMikKKysJZ290byBlcnI7CisrICAg IGk9Qk5fYm4yYmluKGRzYS0+cSxidWYpOworKyAgICBqPXNpemVvZihvdXRfcSk7CisrICAgIGlm IChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfcSxpKSAhPSAwKQorKwlnb3RvIGVycjsKKysKKysg ICAgaT1CTl9ibjJiaW4oZHNhLT5wLGJ1Zik7CisrICAgIGo9c2l6ZW9mKG91dF9wKTsKKysgICAg aWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9wLGkpICE9IDApCisrCWdvdG8gZXJyOworKwor KyAgICBpPUJOX2JuMmJpbihkc2EtPmcsYnVmKTsKKysgICAgaj1zaXplb2Yob3V0X2cpOworKyAg ICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X2csaSkgIT0gMCkKKysJZ290byBlcnI7Cisr ICAgIERTQV9nZW5lcmF0ZV9rZXkoZHNhKTsKKysKKysgICAgaWYgKChwaz1FVlBfUEtFWV9uZXco KSkgPT0gTlVMTCkKKysJZ290byBlcnI7CisrICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRz YSk7CisrCisrICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxM KSkKKysJZ290byBlcnI7CisrICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHN0cjEsIDIw KSkKKysJZ290byBlcnI7CisrICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xl biwgcGspKQorKwlnb3RvIGVycjsKKysKKysgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0 eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9WZXJpZnlV cGRhdGUoJm1jdHgsIHN0cjEsIDIwKSkKKysJZ290byBlcnI7CisrICAgIGlmIChFVlBfVmVyaWZ5 RmluYWwoJm1jdHgsIGJ1Ziwgc2xlbiwgcGspICE9IDEpCisrCWdvdG8gZXJyOworKworKyAgICBy ZXQgPSAxOworKworKyAgICBlcnI6CisrICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Cisr ICAgIGlmIChwaykKKysJRVZQX1BLRVlfZnJlZShwayk7CisrICAgIGVsc2UgaWYgKGRzYSkKKysJ RFNBX2ZyZWUoZHNhKTsKKysgICAgaWYgKHJldCA9PSAwKQorKwkgICAgRklQU2VycihGSVBTX0Zf RklQU19TRUxGVEVTVF9EU0EsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgIHJldHVybiBy ZXQ7CisrICAgIH0KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Zmlwcy5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzLmgKKy0tLSBvcGVuc3Ns LTEuMC4wL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzLmgJMjAxMC0wMy0z MCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTYzIEBACisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysK KysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNlcnJvciBGSVBTIGlzIGRpc2FibGVkLgorKyNlbmRp ZgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0 ZXJuICJDIiB7CisrI2VuZGlmCisrCisrc3RydWN0IGRzYV9zdDsKKytzdHJ1Y3QgZXZwX3BrZXlf c3Q7Cisrc3RydWN0IGVudl9tZF9zdDsKKytzdHJ1Y3QgZXZwX2NpcGhlcl9zdDsKKytzdHJ1Y3Qg ZXZwX2NpcGhlcl9jdHhfc3Q7CisrCisraW50IEZJUFNfbW9kZV9zZXQoaW50IG9ub2ZmKTsKKytp bnQgRklQU19tb2RlKHZvaWQpOworK2NvbnN0IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKTsK KytpbnQgRklQU19zZWxmdGVzdF9mYWlsZWQodm9pZCk7Cisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2No ZWNrKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X3NoYTEodm9pZCk7CisraW50IEZJUFNfc2Vs ZnRlc3Rfc2hhMSh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9hZXModm9pZCk7CisraW50IEZJ UFNfc2VsZnRlc3RfYWVzKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsKKytp bnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKHZvaWQp OworK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRl c3RfcnNhKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2RzYSh2b2lkKTsKKyt2b2lkIEZJUFNf Y29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsK Kyt2b2lkIEZJUFNfY29ycnVwdF9ybmcodm9pZCk7Cisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lk KTsKKytpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfaG1h Yyh2b2lkKTsKKysKKytpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHN0cnVjdCBldnBfcGtl eV9zdCAqcGtleSwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCisr CQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAorKwkJCWNv bnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKwkJ CWNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKKysKKytpbnQgZmlwc19jaXBoZXJfdGVzdChzdHJ1Y3Qg ZXZwX2NpcGhlcl9jdHhfc3QgKmN0eCwKKysJCQljb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAq Y2lwaGVyLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysJCQljb25zdCB1bnNpZ25l ZCBjaGFyICppdiwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsCisrCQkJY29u c3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwKKysJCQlpbnQgbGVuKTsKKysKKysvKiBCRUdJ TiBFUlJPUiBDT0RFUyAqLworKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJh dGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCisrICogbWFkZSBhZnRlciB0 aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4u CisrICovCisrdm9pZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCk7CisrCisrLyogRXJyb3Ig Y29kZXMgZm9yIHRoZSBGSVBTIGZ1bmN0aW9ucy4gKi8KKysKKysvKiBGdW5jdGlvbiBjb2Rlcy4g Ki8KKysjZGVmaW5lIEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUwkJCSAxMDAKKysjZGVmaW5l IEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTgkJCSAxMDEKKysjZGVmaW5lIEZJUFNfRl9EU0Ff RE9fU0lHTgkJCQkgMTAyCisrI2RlZmluZSBGSVBTX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTAzCisr I2RlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgJCQkgMTI0CisrI2RlZmluZSBGSVBTX0Zf RVZQX0RJR0VTVElOSVRfRVgJCQkgMTI1CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0EJ CQkJIDEwNAorKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UCQkg MTA1CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0EJCQkJIDEwNgorKyNkZWZpbmUgRklQ U19GX0ZJUFNfRFNBX0NIRUNLCQkJCSAxMDcKKysjZGVmaW5lIEZJUFNfRl9GSVBTX01PREVfU0VU CQkJCSAxMDgKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QJCQkgMTA5 CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMJCQkgMTEwCisrI2RlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9ERVMJCQkgMTExCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVT VF9EU0EJCQkgMTEyCisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDCQkJIDExMwor KyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HCQkJIDExNAorKyNkZWZpbmUgRklQU19G X0ZJUFNfU0VMRlRFU1RfU0hBMQkJCSAxMTUKKysjZGVmaW5lIEZJUFNfRl9IQVNIX0ZJTkFMCQkJ CSAxMjMKKysjZGVmaW5lIEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4JCQkgMTE2CisrI2RlZmlu ZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQJCQkgMTE3CisrI2RlZmluZSBGSVBTX0Zf UlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQJCQkgMTE4CisrI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9Q VUJMSUNfREVDUllQVAkJCSAxMTkKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNS WVBUCQkJIDEyMAorKyNkZWZpbmUgRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWAkJCSAx MjEKKysjZGVmaW5lIEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMjIKKysKKysvKiBSZWFz b24gY29kZXMuICovCisrI2RlZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFCQkJCSAxMDMKKysj ZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUCQkJIDEwNAorKyNkZWZpbmUgRklQ U19SX0NPTlRSQURJQ1RJTkdfRVZJREVOQ0UJCQkgMTE0CisrI2RlZmluZSBGSVBTX1JfRVhFX0RJ R0VTVF9ET0VTX05PVF9NQVRDSAkJIDEwNQorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RP RVNfTk9UX01BVENICQkgMTEwCisrI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1Rf TUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9E T0VTX05PVF9NQVRDSF9TRUdNRU5UX0FMSUFTSU5HIDExMgorKyNkZWZpbmUgRklQU19SX0ZJUFNf TU9ERV9BTFJFQURZX1NFVAkJCSAxMDIKKysjZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZB SUxFRAkJCSAxMDYKKysjZGVmaW5lIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgJCQkgMTA5Cisr I2RlZmluZSBGSVBTX1JfS0VZX1RPT19TSE9SVAkJCQkgMTA4CisrI2RlZmluZSBGSVBTX1JfTk9O X0ZJUFNfTUVUSE9ECQkJCSAxMDAKKysjZGVmaW5lIEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxF RAkJCSAxMDcKKysjZGVmaW5lIEZJUFNfUl9SU0FfREVDUllQVF9FUlJPUgkJCSAxMTUKKysjZGVm aW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUgkJCSAxMTYKKysjZGVmaW5lIEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQJCQkJIDEwMQorKyNkZWZpbmUgRklQU19SX1RFU1RfRkFJTFVSRQkJCQkgMTE3 CisrI2RlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0JCQkgMTEzCisrCisrI2lmZGVm ICBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8v Zmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRl c3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMzcg QEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisr ICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0 cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25p bmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkg dGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9q ZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0 dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Cisr ICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Cisr CisrI2lmZGVmIE9QRU5TU0xfRklQUworK3R5cGVkZWYgc3RydWN0IHsKKysJY29uc3QgRVZQX01E ICooKmFsZykodm9pZCk7CisrCWNvbnN0IGNoYXIgKmtleSwgKml2OworKwl1bnNpZ25lZCBjaGFy IGthdmFsW0VWUF9NQVhfTURfU0laRV07CisrfSBITUFDX0tBVDsKKysKKytzdGF0aWMgY29uc3Qg SE1BQ19LQVQgdmVjdG9yW10gPSB7CisrICAgIHsJRVZQX3NoYTEsCisrCS8qIGZyb20gaHR0cDov L2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9maXBzLTE5OGEucGRmICov CisrCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4MDksMHgy MiwweGQzLDB4NDAsMHg1ZiwweGFhLDB4M2QsMHgxOSwKKysJICAweDRmLDB4ODIsMHhhNCwweDU4 LDB4MzAsMHg3MywweDdkLDB4NWMsCisrCSAgMHhjNiwweGM3LDB4NWQsMHgyNCB9CisrICAgIH0s CisrICAgIHsJRVZQX3NoYTIyNCwKKysJLyoganVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJvdmUu Li4gKi8KKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHhk ZCwweGVmLDB4MGEsMHg0MCwweGNiLDB4N2QsMHg1MCwweGZiLAorKwkgIDB4NmUsMHhlNiwweGNl LDB4YTEsMHgyMCwweGJhLDB4MjYsMHhhYSwKKysJICAweDA4LDB4ZjMsMHgwNywweDc1LDB4ODcs MHhiOCwweGFkLDB4MWIsCisrCSAgMHg4YywweDhkLDB4MTIsMHhjNyB9CisrICAgIH0sCisrICAg IHsJRVZQX3NoYTI1NiwKKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIs CisrCXsgMHhiOCwweGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEsMHg0MywweDA5LAorKwkgIDB4Y2Es MHg0ZSwweGE5LDB4MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwKKysJICAweGY3LDB4MWYsMHhiZSww eDkxLDB4NzQsMHhhMiwweDYxLDB4MzgsCisrCSAgMHgwZCwweGMxLDB4N2UsMHhhZSwweDZhLDB4 MzQsMHg1MSwweGQ5IH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhMzg0LAorKwkiMDEyMzQ1Njc4 OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDA4LDB4YmMsMHhiMCwweGRhLDB4 NDksMHgxZSwweDg3LDB4YWQsCisrCSAgMHg5YSwweDFkLDB4NmEsMHhjZSwweDIzLDB4YzUsMHgw YiwweGY2LAorKwkgIDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3NywweGNkLDB4NDksMHgwNCwKKysJ ICAweDg5LDB4ZjEsMHhlNiwweDIzLDB4NDQsMHg1MSwweDUxLDB4OWYsCisrCSAgMHg4NSwweDU2 LDB4ODAsMHg3OSwweDBjLDB4YmQsMHg0ZCwweDUwLAorKwkgIDB4YTQsMHg1ZiwweDI5LDB4ZTMs MHg5MywweGYwLDB4ZTgsMHg3ZiB9CisrICAgIH0sCisrICAgIHsJRVZQX3NoYTUxMiwKKysJIjAx MjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHg4MCwweDlkLDB4NDQs MHgwNSwweDdjLDB4NWIsMHg5NSwweDQxLAorKwkgIDB4MDUsMHhiZCwweDA0LDB4MTMsMHgxNiww eGRiLDB4MGYsMHhhYywKKysJICAweDQ0LDB4ZDUsMHhhNCwweGQ1LDB4ZDAsMHg4OSwweDJiLDB4 ZDAsCisrCSAgMHg0ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4OTAsMHg3NywweDY4LAorKwkgIDB4 ZjEsMHg4NywweGI3LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgyZiwKKysJICAweDIxLDB4YTUsMHhi NSwweDY1LDB4OWEsMHg0ZiwweDRiLDB4YTcsCisrCSAgMHg0NywweDAyLDB4YTMsMHhkZSwweDli LDB4NTEsMHhmMSwweDQ1LAorKwkgIDB4YmQsMHg0ZiwweDI1LDB4MjcsMHg0MiwweDk4LDB4OTks MHgwNSB9CisrICAgIH0sCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9obWFjKCkKKysgICAg eworKyAgICBpbnQgbjsKKysgICAgdW5zaWduZWQgaW50ICAgIG91dGxlbjsKKysgICAgdW5zaWdu ZWQgY2hhciAgIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICBjb25zdCBFVlBfTUQgICAqbWQ7 CisrICAgIGNvbnN0IEhNQUNfS0FUICp0OworKworKyAgICBmb3Iobj0wLHQ9dmVjdG9yOyBuPHNp emVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQorKwl7CisrCW1kID0gKCp0 LT5hbGcpKCk7CisrCUhNQUMobWQsdC0+a2V5LHN0cmxlbih0LT5rZXkpLAorKwkJKGNvbnN0IHVu c2lnbmVkIGNoYXIgKil0LT5pdixzdHJsZW4odC0+aXYpLAorKwkJb3V0LCZvdXRsZW4pOworKwor KwlpZihtZW1jbXAob3V0LHQtPmthdmFsLG91dGxlbikpCisrCSAgICB7CisrCSAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAg ICByZXR1cm4gMDsKKysJICAgIH0KKysJfQorKyAgICByZXR1cm4gMTsKKysgICAgfQorKyNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2Ny eXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQxMiBAQAorKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg 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 TUFHRS4KKysgKgorKyAqLworKworKy8qCisrICogVGhpcyBpcyBhIEZJUFMgYXBwcm92ZWQgQUVT IFBSTkcgYmFzZWQgb24gQU5TSSBYOS4zMSBBLjIuNC4KKysgKi8KKysKKysjaW5jbHVkZSAiZV9v cy5oIgorKworKy8qIElmIHdlIGRvbid0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELCBz dHJ1Y3QgdGltZXZhbCB3b24ndAorKyAgIGJlIGRlZmluZWQgYW5kIGdldHRpbWVvZmRheSgpIHdv bid0IGJlIGRlY2xhcmVkIHdpdGggc3RyaWN0IGNvbXBpbGVycworKyAgIGxpa2UgREVDIEMgaW4g QU5TSSBDIG1vZGUuICAqLworKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorKyNkZWZp bmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPG9wZW5z c2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpZm5kZWYgT1BFTlNT TF9TWVNfV0lOMzIKKysjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8 YXNzZXJ0Lmg+CisrI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKyMgaWZkZWYgT1BFTlNTTF9V TklTVEQKKysjICBpbmNsdWRlIE9QRU5TU0xfVU5JU1RECisrIyBlbHNlCisrIyAgaW5jbHVkZSA8 dW5pc3RkLmg+CisrIyBlbmRpZgorKyNlbmRpZgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNp bmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrdm9pZCAq T1BFTlNTTF9zdGRlcnIodm9pZCk7CisrCisrI2RlZmluZSBBRVNfQkxPQ0tfTEVOR1RICTE2Cisr CisrCisrLyogQUVTIEZJUFMgUFJORyBpbXBsZW1lbnRhdGlvbiAqLworKworK3R5cGVkZWYgc3Ry dWN0IAorKwl7CisrCWludCBzZWVkZWQ7CisrCWludCBrZXllZDsKKysJaW50IHRlc3RfbW9kZTsK KysJaW50IHNlY29uZDsKKysJaW50IGVycm9yOworKwl1bnNpZ25lZCBsb25nIGNvdW50ZXI7Cisr CUFFU19LRVkga3M7CisrCWludCB2cG9zOworKwkvKiBUZW1wb3Jhcnkgc3RvcmFnZSBmb3Iga2V5 IGlmIGl0IGVxdWFscyBzZWVkIGxlbmd0aCAqLworKwl1bnNpZ25lZCBjaGFyIHRtcF9rZXlbQUVT X0JMT0NLX0xFTkdUSF07CisrCXVuc2lnbmVkIGNoYXIgVltBRVNfQkxPQ0tfTEVOR1RIXTsKKysJ dW5zaWduZWQgY2hhciBEVFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBsYXN0 W0FFU19CTE9DS19MRU5HVEhdOworKwl9IEZJUFNfUFJOR19DVFg7CisrCisrc3RhdGljIEZJUFNf UFJOR19DVFggc2N0eDsKKysKKytzdGF0aWMgaW50IGZpcHNfcHJuZ19mYWlsID0gMDsKKysKKyt2 b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpCisrCXsKKysJZmlwc19wcm5nX2ZhaWwgPSAxOworKwl9 CisrCisrdm9pZCBmaXBzX3JhbmRfcHJuZ19yZXNldChGSVBTX1BSTkdfQ1RYICpjdHgpCisrCXsK KysJY3R4LT5zZWVkZWQgPSAwOworKwljdHgtPmtleWVkID0gMDsKKysJY3R4LT50ZXN0X21vZGUg PSAwOworKwljdHgtPmNvdW50ZXIgPSAwOworKwljdHgtPnNlY29uZCA9IDA7CisrCWN0eC0+ZXJy b3IgPSAwOworKwljdHgtPnZwb3MgPSAwOworKwlPUEVOU1NMX2NsZWFuc2UoY3R4LT5WLCBBRVNf QkxPQ0tfTEVOR1RIKTsKKysJT1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtzLCBzaXplb2YoQUVTX0tF WSkpOworKwl9CisrCQorKworK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19rZXkoRklQU19QUk5H X0NUWCAqY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVf VCBrZXlsZW4pCisrCXsKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKwlpZiAoa2V5bGVuICE9 IDE2ICYmIGtleWxlbiAhPSAyNCAmJiBrZXlsZW4gIT0gMzIpCisrCQl7CisrCQkvKiBlcnJvcjog aW52YWxpZCBrZXkgc2l6ZSAqLworKwkJcmV0dXJuIDA7CisrCQl9CisrCUFFU19zZXRfZW5jcnlw dF9rZXkoa2V5LCBrZXlsZW4gPDwgMywgJmN0eC0+a3MpOworKwlpZiAoa2V5bGVuID09IDE2KQor KwkJeworKwkJbWVtY3B5KGN0eC0+dG1wX2tleSwga2V5LCAxNik7CisrCQljdHgtPmtleWVkID0g MjsKKysJCX0KKysJZWxzZQorKwkJY3R4LT5rZXllZCA9IDE7CisrCWN0eC0+c2VlZGVkID0gMDsK KysJY3R4LT5zZWNvbmQgPSAwOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyBpbnQgZmlw c19zZXRfcHJuZ19zZWVkKEZJUFNfUFJOR19DVFggKmN0eCwKKysJCQljb25zdCB1bnNpZ25lZCBj aGFyICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCisrCXsKKysJaW50IGk7CisrCWlm ICghY3R4LT5rZXllZCkKKysJCXJldHVybiAwOworKwkvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBq dXN0IHN1cHBsaWVkIGRhdGEgKi8KKysJaWYgKGN0eC0+dGVzdF9tb2RlKQorKwkJeworKwkJaWYg KHNlZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKKysJCQlyZXR1cm4gMDsKKysJCW1lbWNweShj dHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOworKwkJY3R4LT5zZWVkZWQgPSAxOworKwkJ cmV0dXJuIDE7CisrCQl9CisrCS8qIE91dHNpZGUgdGVzdCBtb2RlIFhPUiBzdXBwbGllZCBkYXRh IHdpdGggZXhpc3Rpbmcgc2VlZCAqLworKwlmb3IgKGkgPSAwOyBpIDwgc2VlZGxlbjsgaSsrKQor KwkJeworKwkJY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOworKwkJaWYgKGN0eC0+dnBv cyA9PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJCQljdHgtPnZwb3MgPSAwOworKwkJCS8q IFNwZWNpYWwgY2FzZSBpZiBmaXJzdCBzZWVkIGFuZCBrZXkgbGVuZ3RoIGVxdWFscworKyAJCQkg KiBibG9jayBzaXplIGNoZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCisrIAkJCSAqLyAK KysJCQlpZiAoY3R4LT5rZXllZCA9PSAyKQorKwkJCQl7CisrCQkJCWlmICghbWVtY21wKGN0eC0+ dG1wX2tleSwgY3R4LT5WLCAxNikpCisrCQkJCQl7CisrCQkJCQlSQU5EZXJyKFJBTkRfRl9GSVBT X1NFVF9QUk5HX1NFRUQsCisrCQkJCQkJUkFORF9SX1BSTkdfU0VFRF9NVVNUX05PVF9NQVRDSF9L RVkpOworKwkJCQkJcmV0dXJuIDA7CisrCQkJCQl9CisrCQkJCU9QRU5TU0xfY2xlYW5zZShjdHgt PnRtcF9rZXksIDE2KTsKKysJCQkJY3R4LT5rZXllZCA9IDE7CisrCQkJCX0KKysJCQljdHgtPnNl ZWRlZCA9IDE7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworK2ludCBmaXBzX3Nl dF90ZXN0X21vZGUoRklQU19QUk5HX0NUWCAqY3R4KQorKwl7CisrCWlmIChjdHgtPmtleWVkKQor KwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFLFJBTkRfUl9QUk5HX0tF WUVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwljdHgtPnRlc3RfbW9kZSA9IDE7CisrCXJldHVy biAxOworKwl9CisrCisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkKKysJeworKwlyZXR1 cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKKysJfQorKworK2ludCBGSVBTX3JhbmRfc2V0 X2R0KHVuc2lnbmVkIGNoYXIgKmR0KQorKwl7CisrCWlmICghc2N0eC50ZXN0X21vZGUpCisrCQl7 CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RULFJBTkRfUl9OT1RfSU5fVEVTVF9N T0RFKTsKKysJCXJldHVybiAwOworKwkJfQorKwltZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9D S19MRU5HVEgpOworKwlyZXR1cm4gMTsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfZ2V0X2R0 KEZJUFNfUFJOR19DVFggKmN0eCkKKysgICAgeworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgor KwlGSUxFVElNRSBmdDsKKysjZWxzZQorKwlzdHJ1Y3QgdGltZXZhbCB0djsKKysjZW5kaWYKKysJ dW5zaWduZWQgY2hhciAqYnVmID0gY3R4LT5EVDsKKysKKysjaWZuZGVmIEdFVFBJRF9JU19NRUFO SU5HTEVTUworKwl1bnNpZ25lZCBsb25nIHBpZDsKKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNT TF9TWVNfV0lOMzIKKysJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKKysJYnVmWzBdID0g KHVuc2lnbmVkIGNoYXIpIChmdC5kd0hpZ2hEYXRlVGltZSAmIDB4ZmYpOworKwlidWZbMV0gPSAo dW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOworKwlidWZb Ml0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAxNikgJiAweGZmKTsK KysJYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gMjQpICYg MHhmZik7CisrCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAoZnQuZHdMb3dEYXRlVGltZSAmIDB4 ZmYpOworKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0xvd0RhdGVUaW1lID4+IDgp ICYgMHhmZik7CisrCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUg Pj4gMTYpICYgMHhmZik7CisrCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0 ZVRpbWUgPj4gMjQpICYgMHhmZik7CisrI2Vsc2UKKysJZ2V0dGltZW9mZGF5KCZ0dixOVUxMKTsK KysJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpICh0di50dl9zZWMgJiAweGZmKTsKKysJYnVmWzFd ID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDgpICYgMHhmZik7CisrCWJ1ZlsyXSA9 ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3NlYyA+PiAxNikgJiAweGZmKTsKKysJYnVmWzNdID0g KHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworKwlidWZbNF0gPSAo dW5zaWduZWQgY2hhcikgKHR2LnR2X3VzZWMgJiAweGZmKTsKKysJYnVmWzVdID0gKHVuc2lnbmVk IGNoYXIpICgodHYudHZfdXNlYyA+PiA4KSAmIDB4ZmYpOworKwlidWZbNl0gPSAodW5zaWduZWQg Y2hhcikgKCh0di50dl91c2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbN10gPSAodW5zaWduZWQg Y2hhcikgKCh0di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOworKyNlbmRpZgorKwlidWZbOF0gPSAo dW5zaWduZWQgY2hhcikgKGN0eC0+Y291bnRlciAmIDB4ZmYpOworKwlidWZbOV0gPSAodW5zaWdu ZWQgY2hhcikgKChjdHgtPmNvdW50ZXIgPj4gOCkgJiAweGZmKTsKKysJYnVmWzEwXSA9ICh1bnNp Z25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiAxNikgJiAweGZmKTsKKysJYnVmWzExXSA9ICh1 bnNpZ25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiAyNCkgJiAweGZmKTsKKysKKysJY3R4LT5j b3VudGVyKys7CisrCisrCisrI2lmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysJcGlkPSh1 bnNpZ25lZCBsb25nKWdldHBpZCgpOworKwlidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpIChwaWQg JiAweGZmKTsKKysJYnVmWzEzXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHBpZCA+PiA4KSAmIDB4ZmYp OworKwlidWZbMTRdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDE2KSAmIDB4ZmYpOworKwli dWZbMTVdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDI0KSAmIDB4ZmYpOworKyNlbmRpZgor KyAgICB9CisrCisrc3RhdGljIGludCBmaXBzX3JhbmQoRklQU19QUk5HX0NUWCAqY3R4LAorKwkJ CXVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4pCisrCXsKKysJdW5z aWduZWQgY2hhciBSW0FFU19CTE9DS19MRU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOworKwl1 bnNpZ25lZCBjaGFyIHRtcFtBRVNfQkxPQ0tfTEVOR1RIXTsKKysJaW50IGk7CisrCWlmIChjdHgt PmVycm9yKQorKwkJeworKwkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX0VS Uk9SKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWN0eC0+a2V5ZWQpCisrCQl7CisrCQlS QU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX05PX0tFWV9TRVQpOworKwkJcmV0dXJuIDA7 CisrCQl9CisrCWlmICghY3R4LT5zZWVkZWQpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBT X1JBTkQsUkFORF9SX1BSTkdfTk9UX1NFRURFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJZm9y ICg7OykKKysJCXsKKysJCWlmICghY3R4LT50ZXN0X21vZGUpCisrCQkJZmlwc19nZXRfZHQoY3R4 KTsKKysJCUFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKKysJCWZvciAoaSA9IDA7 IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrCQkJdG1wW2ldID0gSVtpXSBeIGN0eC0+Vltp XTsKKysJCUFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOworKwkJZm9yIChpID0gMDsgaSA8 IEFFU19CTE9DS19MRU5HVEg7IGkrKykKKysJCQl0bXBbaV0gPSBSW2ldIF4gSVtpXTsKKysJCUFF U19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7CisrCQkvKiBDb250aW51b3VzIFBSTkcg dGVzdCAqLworKwkJaWYgKGN0eC0+c2Vjb25kKQorKwkJCXsKKysJCQlpZiAoZmlwc19wcm5nX2Zh aWwpCisrCQkJCW1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOworKwkJCWlm ICghbWVtY21wKFIsIGN0eC0+bGFzdCwgQUVTX0JMT0NLX0xFTkdUSCkpCisrCQkJCXsKKysJICAg IAkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19TVFVDSyk7CisrCQkJCWN0 eC0+ZXJyb3IgPSAxOworKwkJCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQkJCXJldHVy biAwOworKwkJCQl9CisrCQkJfQorKwkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xF TkdUSCk7CisrCQlpZiAoIWN0eC0+c2Vjb25kKQorKwkJCXsKKysJCQljdHgtPnNlY29uZCA9IDE7 CisrCQkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKKysJCQkJY29udGludWU7CisrCQkJfQorKworKwkJ aWYgKG91dGxlbiA8PSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXsKKysJCQltZW1jcHkob3V0LCBS LCBvdXRsZW4pOworKwkJCWJyZWFrOworKwkJCX0KKysKKysJCW1lbWNweShvdXQsIFIsIEFFU19C TE9DS19MRU5HVEgpOworKwkJb3V0ICs9IEFFU19CTE9DS19MRU5HVEg7CisrCQlvdXRsZW4gLT0g QUVTX0JMT0NLX0xFTkdUSDsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysKKysKKytpbnQgRklQ U19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9U IGtleWxlbikKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JB TkQpOworKwlyZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBrZXlsZW4pOworKwlD UllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrCXJldHVybiByZXQ7CisrCX0KKysK KytpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBz ZWVkbGVuKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFO RCk7CisrCXJldCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2VlZCwgc2VlZGxlbik7Cisr CUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQor KworKworK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRf U0laRV9UIGNvdW50KQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xP Q0tfUkFORCk7CisrCXJldCA9IGZpcHNfcmFuZCgmc2N0eCwgb3V0LCBjb3VudCk7CisrCUNSWVBU T193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK2lu dCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3JfbG9j ayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0ID0gc2N0eC5zZWVkZWQ7CisrCUNSWVBUT19yX3Vu bG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQorKworK3ZvaWQgRklQ U19yYW5kX3Jlc2V0KHZvaWQpCisrCXsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5E KTsKKysJZmlwc19yYW5kX3BybmdfcmVzZXQoJnNjdHgpOworKwlDUllQVE9fd191bmxvY2soQ1JZ UFRPX0xPQ0tfUkFORCk7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2RvX3JhbmRfc2VlZChj b25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCisrCXsKKysJRklQU19y YW5kX3NlZWQoc2VlZCwgc2VlZGxlbik7CisrCX0KKysKKytzdGF0aWMgdm9pZCBmaXBzX2RvX3Jh bmRfYWRkKGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbiwKKysJCQkJ CWRvdWJsZSBhZGRfZW50cm9weSkKKysJeworKwlGSVBTX3JhbmRfc2VlZChzZWVkLCBzZWVkbGVu KTsKKysJfQorKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2ZpcHNfbWV0aD0KKysg ICAgeworKyAgICBmaXBzX2RvX3JhbmRfc2VlZCwKKysgICAgRklQU19yYW5kX2J5dGVzLAorKyAg ICBGSVBTX3JhbmRfcmVzZXQsCisrICAgIGZpcHNfZG9fcmFuZF9hZGQsCisrICAgIEZJUFNfcmFu ZF9ieXRlcywKKysgICAgRklQU19yYW5kX3N0YXR1cworKyAgICB9OworKworK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCisreworKyAgcmV0dXJuICZyYW5kX2ZpcHNf bWV0aDsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2ZpcHNfcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAor LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcwkyMDEwLTAzLTMw IDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kLmgJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAg KzEsNzcgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaWZuZGVmIEhFQURFUl9G SVBTX1JBTkRfSAorKyNkZWZpbmUgSEVBREVSX0ZJUFNfUkFORF9ICisrCisrI2luY2x1ZGUgImRl cy5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisr ZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisraW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVu c2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOworK2ludCBGSVBTX3Jh bmRfc2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKTsKKytpbnQgRklQ U19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgRklQU19SQU5EX1NJWkVfVCBvdXRsZW4p OworKworK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpOworK3ZvaWQgRklQU19yYW5kX3Jl c2V0KHZvaWQpOworK2ludCBGSVBTX3JhbmRfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsKKysK KytpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKTsKKysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQ U19yYW5kX21ldGhvZCh2b2lkKTsKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRp ZgorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9m aXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19y YW5kX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9z ZWxmdGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM3MyBAQAorKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJl IG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgor KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNv cmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwor KyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgor KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzX3JhbmQuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrCisrCisrdHlwZWRl ZiBzdHJ1Y3QKKysJeworKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBW WzE2XTsKKysJdW5zaWduZWQgY2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19UVjsKKysKKysvKiBU aGUgZm9sbG93aW5nIHRlc3QgdmVjdG9ycyBhcmUgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgUkdO VlMgc3BlYyAqLworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xMjhfa2V5WzE2XSA9Cisr CQl7MHhmMywweGIxLDB4NjYsMHg2ZCwweDEzLDB4NjAsMHg3MiwweDQyLAorKwkJIDB4ZWQsMHgw NiwweDFjLDB4YWIsMHhiOCwweGQ0LDB4NjIsMHgwMn07CisrCisrc3RhdGljIEFFU19QUk5HX1RW IGFlc18xMjhfdHZbXSA9IHsKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJl LDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAs MHhlOSwweDIyLDB4Zjl9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDU5LDB4NTMsMHgxZSwweGQxLDB4M2IsMHhi MCwweGMwLDB4NTUsCisrCQkgMHg4NCwweDc5LDB4NjYsMHg4NSwweGMxLDB4MmYsMHg3NiwweDQx fQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJh LDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIs MHhmYX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK KysJCQkJLyogUiAqLworKwkJezB4N2MsMHgyMiwweDJjLDB4ZjQsMHhjYSwweDhmLDB4YTIsMHg0 YywKKysJCSAweDFjLDB4OWMsMHhiNiwweDQxLDB4YTksMHhmMywweDIyLDB4MGR9CisrCX0sCisr CXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZh LDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZifSwKKysJ CQkJLyogViAqLworKwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK KysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBS ICovCisrCQl7MHg4YSwweGFhLDB4MDAsMHgzOSwweDY2LDB4NjcsMHg1YiwweGU1LAorKwkJIDB4 MjksMHgxNCwweDI4LDB4ODEsMHhhOSwweDRkLDB4NGUsMHhjN30KKysJfSwKKysJeworKwkJCQkv KiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJ CSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmN9LAorKwkJCQkvKiBWICov CisrCQl7MHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsw eDg4LDB4ZGQsMHhhNCwweDU2LDB4MzAsMHgyNCwweDIzLDB4ZTUsCisrCQkgMHhmNiwweDlkLDB4 YTUsMHg3ZSwweDdiLDB4OTUsMHhjNywweDNhfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisr CQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgx ZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmZH0sCisrCQkJCS8qIFYgKi8KKysJCXsweGY4 LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MDUsMHgyNSww eDkyLDB4NDYsMHg2MSwweDc5LDB4ZDIsMHhjYiwKKysJCSAweDc4LDB4YzQsMHgwYiwweDE0LDB4 MGEsMHg1YSwweDlhLDB4Yzh9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4 YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhm YiwweGIwLDB4ZTksMHgyMywweDc3fSwKKysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZmLDB4ZmV9LAorKwkJCQkvKiBSICovCisrCQl7MHgwZCwweGQ1LDB4YTAsMHgzNiww eDdhLDB4NTksMHgyNiwweGJjLAorKwkJIDB4NDgsMHhkOSwweDM4LDB4YmYsMHhmMCwweDg1LDB4 OGYsMHhlYX0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4 NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhl OSwweDIzLDB4Nzh9LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZn0sCisrCQkJCS8qIFIgKi8KKysJCXsweGFlLDB4NTMsMHg4NywweGVlLDB4OGMsMHhkOSww eDEyLDB4ZjUsCisrCQkgMHg3MywweDUzLDB4YWUsMHgwMywweGY5LDB4ZDUsMHgxMywweDMzfQor Kwl9LAorK307CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9rZXlbMjRdID0KKysJ CXsweDE1LDB4ZDgsMHg3OCwweDBkLDB4NjIsMHhkMywweDI1LDB4NmUsCisrCQkgMHg0NCwweDY0 LDB4MTAsMHgxMywweDYwLDB4MmIsMHhhOSwweGJjLAorKwkJIDB4NGEsMHhmYiwweGNhLDB4ZWIs MHg0YywweDhiLDB4OTksMHgzYn07CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18xOTJfdHZb XSA9IHsKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCww eDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4 NGJ9LAorKwkJCQkvKiBWICovCisrCQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisr CQkJCS8qIFIgKi8KKysJCXsweDE3LDB4MDcsMHhkNSwweDI4LDB4MTksMHg3OSwweDFlLDB4ZWYs CisrCQkgMHhhNSwweDBjLDB4YmYsMHgyNSwweGU1LDB4NTYsMHhiNCwweDkzfQorKwl9LAorKwl7 CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4Yiww eGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0Y30sCisrCQkJ CS8qIFYgKi8KKysJCXsweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisr CQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAq LworKwkJezB4OTIsMHg4ZCwweGJlLDB4MDcsMHhkZCwweGM3LDB4NTgsMHhjMCwKKysJCSAweDZm LDB4MzUsMHg0MSwweDliLDB4MTcsMHhjOSwweGJkLDB4OWJ9CisrCX0sCisrCXsKKysJCQkJLyog RFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkg MHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRkfSwKKysJCQkJLyogViAqLwor KwkJezB4ZTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHhk NSwweGRlLDB4ZjQsMHg1MCwweGYzLDB4YjcsMHgxMCwweDRlLAorKwkJIDB4YjgsMHhjNiwweGY4 LDB4Y2YsMHhlMiwweGIxLDB4Y2EsMHhhMn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJ ezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTks MHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGV9LAorKwkJCQkvKiBWICovCisrCQl7MHhmMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweGNlLDB4MjksMHgw OCwweDQzLDB4ZmMsMHgzNCwweDQxLDB4ZTcsCisrCQkgMHg0NywweDhmLDB4YjMsMHg2NiwweDJi LDB4NDYsMHhiMSwweGJifQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4 LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQs MHgyNCwweDc4LDB4ZjMsMHg0Zn0sCisrCQkJCS8qIFYgKi8KKysJCXsweGY4LDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4YjMsMHgyNiwweDBmLDB4ZjUsMHhk NiwweGNhLDB4YTgsMHhiZiwKKysJCSAweDg5LDB4YjgsMHg1ZSwweDJmLDB4MjIsMHg1NiwweDky LDB4MmZ9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4 LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4Nzgs MHhmMywweGM5fSwKKysJCQkJLyogViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmV9LAorKwkJCQkvKiBSICovCisrCQl7MHgwNSwweGViLDB4MTgsMHg1MiwweDM0LDB4NDMsMHgw MCwweDQzLAorKwkJIDB4NmUsMHg1YSwweGE1LDB4ZmUsMHg3YiwweDMyLDB4YzQsMHgyZH0KKysJ fSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5 LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4Y2F9 LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0sCisrCQkJ CS8qIFIgKi8KKysJCXsweDE1LDB4M2MsMHhlOCwweGQxLDB4MDQsMHhjNywweGFkLDB4NTAsCisr CQkgMHgwYiwweGYwLDB4MDcsMHgxNiwweGU3LDB4NTYsMHg3YSwweGVhfQorKwl9LAorK307Cisr Cisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9rZXlbMzJdID0KKysJCXsweDZkLDB4MTQs MHgwNiwweDZjLDB4YjYsMHhkOCwweDIxLDB4MmQsCisrCQkgMHg4MiwweDhkLDB4ZmEsMHhmMiww eDdhLDB4MDMsMHhiNywweDlmLAorKwkJIDB4MGMsMHhjNywweDNlLDB4Y2QsMHg3NiwweGViLDB4 ZWUsMHhiNSwKKysJCSAweDIxLDB4MDUsMHg4YywweDRmLDB4MzEsMHg3YSwweDgwLDB4YmJ9Owor KworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2X3R2W10gPSB7CisrCXsKKysJCQkJLyogRFQg Ki8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhm MiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDg4fSwKKysJCQkJLyogViAqLworKwkJ ezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgzNSww eGM3LDB4ZWYsMHhhNywweDc4LDB4NGQsMHgyOSwweGJjLAorKwkJIDB4ODIsMHg3OSwweDk5LDB4 ZmIsMHhkMCwweGIzLDB4M2IsMHg3Mn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4 ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0 ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODl9LAorKwkJCQkvKiBWICovCisrCQl7MHhjMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDZjLDB4ZjQsMHg0Miww eDVkLDB4YzcsMHgwNCwweDFhLDB4NDEsCisrCQkgMHgyOCwweDJhLDB4NzgsMHhhOSwweGIwLDB4 MTIsMHhjNCwweDk1fQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4 NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3 NCwweDhlLDB4OWUsMHg4YX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGUwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4MTYsMHg5MCwweGE0LDB4ZmYsMHg3Yiww eDdlLDB4YjksMHgzMCwKKysJCSAweGRiLDB4NjcsMHg0YiwweGFjLDB4MmQsMHhlMSwweGQxLDB4 NzV9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4 MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5 ZSwweDhifSwKKysJCQkJLyogViAqLworKwkJezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9 LAorKwkJCQkvKiBSICovCisrCQl7MHgxNCwweDZmLDB4ZjUsMHg5NSwweGExLDB4NDYsMHg2NSww eDMwLAorKwkJIDB4YmMsMHg1NywweGUyLDB4NGEsMHhmNywweDQ1LDB4NjIsMHgwNX0KKysJfSwK KysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4 YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4OGN9LAor KwkJCQkvKiBWICovCisrCQl7MHhmOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8q IFIgKi8KKysJCXsweDk2LDB4ZTIsMHhiNCwweDFlLDB4NjYsMHg1ZSwweDBmLDB4YTQsCisrCQkg MHhjNSwweGNkLDB4YTIsMHgwNywweGNjLDB4YjcsMHg5NCwweDQwfQorKwl9LAorKwl7CisrCQkJ CS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAor KwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwNn0sCisrCQkJCS8qIFYg Ki8KKysJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCisrCQkgMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwKKysJCQkJLyogUiAqLworKwkJ ezB4NjEsMHhjZSwweDFkLDB4NmEsMHg0OCwweDc1LDB4OTcsMHgyOCwKKysJCSAweDRiLDB4NDEs MHhkZSwweDE4LDB4NDQsMHg0ZiwweDU2LDB4ZWN9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8K KysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiww eGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZiwweDA3fSwKKysJCQkJLyogViAqLworKwkJezB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKysJCSAweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAorKwkJCQkvKiBSICovCisrCQl7MHg1MiwweDg5 LDB4NTksMHg3OSwweDJkLDB4YWEsMHgyOCwweGIzLAorKwkJIDB4YjAsMHg4YSwweDNlLDB4NzAs MHhmYSwweDcxLDB4NTksMHg4NH0KKysJfSwKKyt9OworKworKworK3ZvaWQgRklQU19jb3JydXB0 X3JuZygpCisrICAgIHsKKysgICAgYWVzXzE5Ml90dlswXS5WWzBdKys7CisrICAgIH0KKysKKysj ZGVmaW5lIGZpcHNfcmFuZF90ZXN0KGtleSwgdHYpIFwKKysJZG9fcmFuZF90ZXN0KGtleSwgc2l6 ZW9mIGtleSwgdHYsIHNpemVvZih0dikvc2l6ZW9mKEFFU19QUk5HX1RWKSkKKysKKytzdGF0aWMg aW50IGRvX3JhbmRfdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sCisrCQkJQUVT X1BSTkdfVFYgKnR2LCBpbnQgbnR2KQorKwl7CisrCXVuc2lnbmVkIGNoYXIgUlsxNl07CisrCWlu dCBpOworKwlpZiAoIUZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVuKSkKKysJCXJldHVybiAw OworKwlmb3IgKGkgPSAwOyBpIDwgbnR2OyBpKyspCisrCQl7CisrCQlGSVBTX3JhbmRfc2VlZCh0 dltpXS5WLCAxNik7CisrCQlGSVBTX3JhbmRfc2V0X2R0KHR2W2ldLkRUKTsKKysJCUZJUFNfcmFu ZF9ieXRlcyhSLCAxNik7CisrCQlpZiAobWVtY21wKFIsIHR2W2ldLlIsIDE2KSkKKysJCQlyZXR1 cm4gMDsKKysJCX0KKysJcmV0dXJuIDE7CisrCX0KKysJCisrCisraW50IEZJUFNfc2VsZnRlc3Rf cm5nKCkKKysJeworKwlGSVBTX3JhbmRfcmVzZXQoKTsKKysJaWYgKCFGSVBTX3JhbmRfdGVzdF9t b2RlKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORyxGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwlpZiAoIWZpcHNfcmFuZF90 ZXN0KGFlc18xMjhfa2V5LGFlc18xMjhfdHYpCisrCQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzE5 Ml9rZXksIGFlc18xOTJfdHYpCisrCQl8fCAhZmlwc19yYW5kX3Rlc3QoYWVzXzI1Nl9rZXksIGFl c18yNTZfdHYpKQorKwkJeworKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQ U19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysJRklQU19yYW5kX3Jl c2V0KCk7CisrCXJldHVybiAxOworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEu MC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2ZpcHMvZmlwc19yYW5kdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBz X3JhbmR0ZXN0LmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMTAtMDMtMzAgMTA6 MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDI0OCBAQAorKy8qIENvcHlyaWdodCAo QykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0 aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICog VGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRz Y2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFs IGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFw cGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0 LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2Rl LiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1 dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0 aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAor KyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHly aWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAq IElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQg YmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0 aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVh bCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9u bGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K KysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQg aWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5v dCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBX aW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAq ICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVk ZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAor KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFu ZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9u IG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUu IHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5v dGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMg TGljZW5jZS5dCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUg PHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysj aW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BF TlNTTF9GSVBTCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHBy aW50ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKwor KyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrdHlwZWRlZiBzdHJ1Y3QKKysJ eworKwl1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysJdW5zaWduZWQgY2hhciBWWzE2XTsKKysJdW5z aWduZWQgY2hhciBSWzE2XTsKKysJfSBBRVNfUFJOR19NQ1Q7CisrCisrc3RhdGljIHVuc2lnbmVk IGNoYXIgYWVzXzEyOF9tY3Rfa2V5WzE2XSA9CisrCXsweDlmLDB4NWIsMHg1MSwweDIwLDB4MGIs MHhmMywweDM0LDB4YjUsCisrCSAweGQ4LDB4MmIsMHhlOCwweGMzLDB4NzIsMHg1NSwweGM4LDB4 NDh9OworKworK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzEyOF9tY3RfdHYgPSB7CisrCQkJLyog RFQgKi8KKysJezB4NjMsMHg3NiwweGJiLDB4ZTUsMHgyOSwweDAyLDB4YmEsMHgzYiwKKysJIDB4 NjcsMHhjOSwweDI1LDB4ZmEsMHg3MCwweDFmLDB4MTEsMHhhY30sCisrCQkJLyogViAqLworKwl7 MHg1NywweDJjLDB4OGUsMHg3NiwweDg3LDB4MjYsMHg0NywweDk3LAorKwkgMHg3ZSwweDc0LDB4 ZmIsMHhkZCwweGM0LDB4OTUsMHgwMSwweGQxfSwKKysJCQkvKiBSICovCisrCXsweDQ4LDB4ZTks MHhiZCwweDBkLDB4MDYsMHhlZSwweDE4LDB4ZmIsCisrCSAweGU0LDB4NTcsMHg5MCwweGQ1LDB4 YzMsMHhmYywweDliLDB4NzN9CisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTky X21jdF9rZXlbMjRdID0KKysJezB4YjcsMHg2YywweDM0LDB4ZDEsMHgwOSwweDY3LDB4YWIsMHg3 MywKKysJIDB4NGQsMHg1YSwweGQ1LDB4MzQsMHg5OCwweDE2LDB4MGIsMHg5MSwKKysJIDB4YmMs MHgzNSwweDUxLDB4MTYsMHg2YiwweGFlLDB4OTMsMHg4YX07CisrCisrc3RhdGljIEFFU19QUk5H X01DVCBhZXNfMTkyX21jdF90diA9IHsKKysJCQkvKiBEVCAqLworKwl7MHg4NCwweGNlLDB4MjIs MHg3ZCwweDkxLDB4NWEsMHhhMywweGM5LAorKwkgMHg4NCwweDNjLDB4MGEsMHhiMywweGE5LDB4 NjMsMHgxNSwweDUyfSwKKysJCQkvKiBWICovCisrCXsweGI2LDB4YWYsMHhlNiwweDhmLDB4OTks MHg5ZSwweDkwLDB4NjQsCisrCSAweGRkLDB4YzcsMHg3YSwweGMxLDB4YmIsMHg5MCwweDNhLDB4 NmR9LAorKwkJCS8qIFIgKi8KKysJezB4ZmMsMHg4NSwweDYwLDB4OWEsMHgyOSwweDZmLDB4ZWYs MHgyMSwKKysJIDB4ZGQsMHg4NiwweDIwLDB4MzIsMHg4YSwweDI5LDB4NmYsMHg0N30KKyt9Owor KworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQorKwl7MHg5Yiww eDA1LDB4YzgsMHg2OCwweGZmLDB4NDcsMHhmOCwweDNhLAorKwkgMHhhNiwweDNhLDB4YTgsMHhj YiwweDRlLDB4NzEsMHhiMiwweGUwLAorKwkgMHhiOCwweDdlLDB4ZjEsMHgzNywweGI2LDB4YjQs MHhmNiwweDZkLAorKwkgMHg4NiwweDMyLDB4ZmMsMHgxZiwweDVlLDB4MWQsMHgxZSwweDUwfTsK KysKKytzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0geworKwkJCS8qIERUICov CisrCXsweDMxLDB4NmUsMHgzNSwweDlhLDB4YjEsMHg0NCwweGYwLDB4ZWUsCisrCSAweDYyLDB4 NmQsMHgwNCwweDQ2LDB4ZTAsMHhhMywweDkyLDB4NGN9LAorKwkJCS8qIFYgKi8KKysJezB4NGYs MHhjZCwweGMxLDB4ODcsMHg4MiwweDFmLDB4NGQsMHhhMSwKKysJIDB4M2UsMHgwZSwweDU2LDB4 NDQsMHg1OSwweGU4LDB4ODMsMHhjYX0sCisrCQkJLyogUiAqLworKwl7MHhjOCwweDg3LDB4YzIs MHg2MSwweDViLDB4ZDAsMHhiOSwweGUxLAorKwkgMHhlNywweGYzLDB4OGIsMHhkNywweDViLDB4 ZDUsMHhmMSwweDhkfQorK307CisrCisrc3RhdGljIHZvaWQgZHVtcChjb25zdCB1bnNpZ25lZCBj aGFyICpiLGludCBuKQorKyAgICB7CisrICAgIHdoaWxlKG4tLSA+IDApCisrCXsKKysJcHJpbnRm KCIgJTAyeCIsKmIrKyk7CisrCX0KKysgICAgfQorKworK3N0YXRpYyB2b2lkIGNvbXBhcmUoY29u c3QgdW5zaWduZWQgY2hhciAqcmVzdWx0LGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4cGVjdGVkLAor KwkJICAgIGludCBuKQorKyAgICB7CisrICAgIGludCBpOworKworKyAgICBmb3IoaT0wIDsgaSA8 IG4gOyArK2kpCisrCWlmKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtpXSkKKysJICAgIHsKKysJICAg IHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOworKwkgICAgZHVtcChyZXN1bHQsbik7 CisrCSAgICBwdXRzKCJcbiAgICAgICAgICAgICAgIGV4cGVjdGVkOiIpOworKwkgICAgZHVtcChl eHBlY3RlZCxuKTsKKysJICAgIHB1dGNoYXIoJ1xuJyk7CisrCSAgICBFWElUKDEpOworKwkgICAg fQorKyAgICB9CisrCisrCisrc3RhdGljIHZvaWQgcnVuX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5 LCBpbnQga2V5bGVuLCBBRVNfUFJOR19NQ1QgKnR2KQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNo YXIgYnVmWzE2XSwgZHRbMTZdOworKyAgICBpbnQgaSwgajsKKysgICAgRklQU19yYW5kX3Jlc2V0 KCk7CisrICAgIEZJUFNfcmFuZF90ZXN0X21vZGUoKTsKKysgICAgRklQU19yYW5kX3NldF9rZXko a2V5LCBrZXlsZW4pOworKyAgICBGSVBTX3JhbmRfc2VlZCh0di0+ViwgMTYpOworKyAgICBtZW1j cHkoZHQsIHR2LT5EVCwgMTYpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykKKysJ eworKyAgICAJRklQU19yYW5kX3NldF9kdChkdCk7CisrCUZJUFNfcmFuZF9ieXRlcyhidWYsIDE2 KTsKKysJLyogSW5jcmVtZW50IERUICovCisrCWZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKKysJ CXsKKysJCWR0W2pdKys7CisrCQlpZiAoZHRbal0pCisrCQkJYnJlYWs7CisrCQl9CisrCX0KKysK KysgICAgY29tcGFyZShidWYsdHYtPlIsIDE2KTsKKysgICAgfQorKworK2ludCBtYWluKCkKKysJ eworKwlydW5fdGVzdChhZXNfMTI4X21jdF9rZXksIDE2LCAmYWVzXzEyOF9tY3RfdHYpOworKwlw cmludGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9uZVxuIik7CisrCXJ1bl90ZXN0KGFlc18xOTJfbWN0 X2tleSwgMjQsICZhZXNfMTkyX21jdF90dik7CisrCXByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBk b25lXG4iKTsKKysJcnVuX3Rlc3QoYWVzXzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2 KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAzIGRvbmVcbiIpOworKwlyZXR1cm4gMDsKKysJ fQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3Jz YV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxm dGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5j LmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4wL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4w MDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNDQxIEBACisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6 CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAg ICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xj b25mLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFy IG5bXSA9CisrIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4XHhB Q1x4MkJceDlEXHhBOFx4NzEiCisrIlx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQzXHhB NFx4NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4RjUiCisrIlx4MUZceEI4XHhERlx4QkFceEFGXHgw M1x4NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2Rlx4Q0QiCisrIlx4NDhceDc2XHhF RFx4NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCisr Ilx4N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4QjdceEQ5 XHgzQVx4MjUiCisrIlx4ODRceEVFXHg2QVx4NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhceDM0 XHhCMlx4NDVceDQ1XHg5OFx4MzkiCisrIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1 XHgxRlx4NTJceDdBXHg5QVx4NDFceEY2XHhDMVx4NjgiCisrIlx4N0ZceEUyXHg1M1x4NzJceDk4 XHhDQVx4MkFceDhGXHg1OVx4NDZceEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiCisrIlx4Q0IiOwor KworKworK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQorKyAgICB7CisrICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKKysKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZFtdID0KKysiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4RjJc eDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKKysiXHhGOFx4M0ZceDMxXHgyNVx4MUVc eDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKKysiXHhCMlx4OTRc eDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIK KysiXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgyRVx4 QzlceDNFXHhEQSIKKysiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4 MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKKysiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4 MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKKysiXHg5M1x4OTlceDI2XHhFRFx4 NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKKysiXHhBRlx4 OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhC MyIKKysiXHhDMSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9Cisr Ilx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBceEEx XHhCNVx4NjAiCisrIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4 XHgxQVx4OUVceDNEXHg4NFx4RjYiCisrIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFF XHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCisrIlx4MkRceDVCXHgyNVx4MjFceDc2 XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCisrIlx4OTkiOwor KworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQorKyJceDAwXHhDOVx4N0Zc eEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgorKyJc eDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgwMlx4 OEJceDlEIgorKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgwRFx4 QTNceEI0XHgzMlx4MDRceEI1IgorKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4 QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgorKyJceDAzIjsKKysKKysgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KKysiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJB XHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKKysiXHhFQlx4MDdceERE XHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKKysi XHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4MkVc eDlBXHgyRSIKKysiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4Qzlc eDNDXHgxRlx4NjdceEM5XHg4MSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGRtcTFbXSA9CisrIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3 XHhGOFx4NzhceDg2XHg0Q1x4QTkiCisrIlx4NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlceDFD XHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCisrIlx4RjlceDgwXHgzRlx4OEZceDZG XHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCisrIlx4MUJceDk5 XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0Qi OworKyAgICAKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KKysiXHgw MFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0 XHgyMyIKKysiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdG XHhDRFx4MzlceEUyXHgxMSIKKysiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNceEIx XHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKKysiXHg5RVx4MkVceDBGXHg5Nlx4NTZceEU2 XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKKysiXHhGNyI7CisrCisr ICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5uKTsKKysgICAga2V5 LT5lID0gQk5fYmluMmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOworKyAgICBrZXktPmQgPSBC Tl9iaW4yYm4oZCwgc2l6ZW9mKGQpLTEsIGtleS0+ZCk7CisrICAgIGtleS0+cCA9IEJOX2JpbjJi bihwLCBzaXplb2YocCktMSwga2V5LT5wKTsKKysgICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNp emVvZihxKS0xLCBrZXktPnEpOworKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6 ZW9mKGRtcDEpLTEsIGtleS0+ZG1wMSk7CisrICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihkbXEx LCBzaXplb2YoZG1xMSktMSwga2V5LT5kbXExKTsKKysgICAga2V5LT5pcW1wID0gQk5fYmluMmJu KGlxbXAsIHNpemVvZihpcW1wKS0xLCBrZXktPmlxbXApOworKyAgICByZXR1cm4gMTsKKysgICAg fQorKworK3ZvaWQgRklQU19jb3JydXB0X3JzYSgpCisrICAgIHsKKysgICAgblswXSsrOworKyAg ICB9CisrCisrLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJT QSBwcml2YXRlIGtleSBzaWduaW5nCisrICoga2F0X3Ricy4KKysgKi8KKysKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBL ZXkgUlNBIEtBVCI7CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1Nf U0hBMVtdID0geworKyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4QSwg MHhBMSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKKysgIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMs IDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCisrICAweEY0 LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAw eEY4LCAweEQzLAorKyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhDMywg MHhCNSwgMHhDNywgMHg4MywgMHhENSwgMHg0QywKKysgIDB4N0YsIDB4NDksIDB4RkIsIDB4M0Ys IDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCisrICAweDBE LCAweEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAw eDlCLCAweEY1LAorKyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4Mywg MHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKKysgIDB4MEEsIDB4RTksIDB4OEUsIDB4Mzgs IDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCisrICAweEQ2 LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAw eEJBLCAweEU4LAorKyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhENSwg MHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKKysgIDB4MjYsIDB4QzYsIDB4NzksIDB4Qzks IDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0geworKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgyMCwg MHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywKKysgIDB4RkUs IDB4ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgsIDB4 OTUsIDB4RkEsCisrICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIxLCAw eDU5LCAweDg3LCAweDdCLCAweDFGLCAweDU3LAorKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwg MHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4OSwKKysgIDB4ODMs IDB4NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYsIDB4 MDUsIDB4RUUsCisrICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBELCAw eDBDLCAweDY0LCAweDBCLCAweEFCLCAweDIyLAorKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2Riwg MHhBNCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKKysgIDB4Mzcs IDB4MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4MzgsIDB4 MjQsIDB4NDksCisrICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkzLCAw eDhFLCAweEY1LCAweDAzLCAweEVBLCAweDJELAorKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwg MHg3RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKKysgIDB4NTQs IDB4NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4QzAKKyt9OworKworK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1NltdID0geworKyAgMHg2RCwg MHgzRCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhF MywgMHg4OSwKKysgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4 MTAsIDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYsCisrICAweDdCLCAweEM1LCAweEE4LCAweDRBLCAw eDc0LCAweDUxLCAweDM2LCAweEUyLCAweDhELCAweDdELCAweDczLCAweDI4LAorKyAgMHhDMSwg MHg3NywgMHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3 MywgMHg0RSwKKysgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4 REYsIDB4OUQsIDB4NDksIDB4NDcsIDB4MDUsCisrICAweEFCLCAweEY1LCAweDAxLCAweEQ2LCAw eDgxLCAweDQ3LCAweDcwLCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAorKyAgMHgyRiwg MHg3QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywgMHhE QSwgMHhCNiwKKysgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4 RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCisrICAweDIxLCAweEI3LCAweDdFLCAweEFELCAw eDdDLCAweDJGLCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAorKyAgMHg1Riwg MHhCNywgMHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwgMHhC OSwgMHhGNiwKKysgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQsIDB4 MUMKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4 NFtdID0geworKyAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwgMHg5 QSwgMHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKKysgIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4 N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCisrICAweDg2LCAw eDAwLCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlB LCAweENELAorKyAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwgMHhE OSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKKysgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4 QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCisrICAweEIyLCAw eDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAweDRG LCAweEZCLAorKyAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwgMHhB NCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKKysgIDB4M0EsIDB4QkUsIDB4ODksIDB4MzgsIDB4 NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCisrICAweDk4LCAw eDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAweENB LCAweDZGLAorKyAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwgMHg4 OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKKysgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYsIDB4 OTAsIDB4MTgsIDB4NEIsIDB4RjEKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfUFNTX1NIQTUxMltdID0geworKyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgw NSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4QywKKysgIDB4QzYsIDB4 ODMsIDB4QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4NTMs IDB4OUEsCisrICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAweDIzLCAweDRE LCAweDUxLCAweEVELCAweDlFLCAweERELAorKyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2 QiwgMHhGNiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKKysgIDB4MDEsIDB4 MUMsIDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4RkUs IDB4RDcsCisrICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAweEJCLCAweEYw LCAweDNELCAweDc4LCAweDU1LCAweDYxLAorKyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhE MiwgMHg5RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKKysgIDB4QzUsIDB4 NDcsIDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4Mzks IDB4NjMsCisrICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRC LCAweEJGLCAweEY0LCAweEE4LCAweEZFLAorKyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5 QywgMHg3QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKKysgIDB4NUMsIDB4 OTcsIDB4NzAsIDB4QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIKKyt9OworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMVtdID0geworKyAgMHg3MSwgMHhFRSwgMHgx QSwgMHhDMCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0QywK KysgIDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEs IDB4MzMsIDB4OEQsIDB4OUIsCisrICAweEU3LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAweEI1 LCAweEEzLCAweDUxLCAweDU1LCAweDc3LCAweDkwLCAweENGLAorKyAgMHhEQywgMHgyMiwgMHgz NywgMHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhGOCwK KysgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4ODgs IDB4OEIsIDB4OEIsIDB4QTEsCisrICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAweEUw LCAweDIzLCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAorKyAgMHhBOSwgMHg5RSwgMHhF OCwgMHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0RSwK KysgIDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4MDQs IDB4NDQsIDB4RTUsIDB4NUYsCisrICAweDM1LCAweDA3LCAweDExLCAweEJDLCAweEVELCAweDE5 LCAweDM3LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAorKyAgMHg3MiwgMHgwNSwgMHhE RSwgMHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5NSwK KysgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKKyt9Owor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7CisrICAw eDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAweEI3 LCAweDE1LCAweEY5LAorKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwgMHhF RCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKKysgIDB4NUIsIDB4NTUsIDB4OUEsIDB4 N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCisrICAw eDA4LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAweDJD LCAweDlFLCAweENELAorKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwgMHg2 RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKKysgIDB4RUUsIDB4MUYsIDB4OEQsIDB4 N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCisrICAw eERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAweDAy LCAweEM2LCAweDNCLAorKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwgMHhG OCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKKysgIDB4NTgsIDB4MkUsIDB4MDYsIDB4 NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCisrICAw eEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAweDc3LCAweDgy LCAweEU2LCAweERDLAorKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwgMHgx RSwgMHg4RAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEy NTZbXSA9IHsKKysgIDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4 ODIsIDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMsCisrICAweEU3LCAweDNCLCAweDFELCAweEFGLCAw eEZCLCAweDhDLCAweEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFBLCAweDIzLAorKyAgMHg5Miwg MHg4NywgMHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2 RiwgMHgzNSwKKysgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4 MDEsIDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUsCisrICAweDJDLCAweDQ0LCAweDlCLCAweDkwLCAw eEYxLCAweEZCLCAweDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJELCAweDE4LAorKyAgMHgwRSwg MHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5 MSwgMHgzMCwKKysgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4 NUQsIDB4QkYsIDB4RTIsIDB4ODAsIDB4M0EsCisrICAweDdDLCAweDg1LCAweEI0LCAweEJDLCAw eEQxLCAweEU5LCAweEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAorKyAgMHhCOCwg MHg0MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwgMHhE MSwgMHhEQSwKKysgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4 ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCisrICAweEJELCAweDQ0LCAweDk3LCAweDYwLCAw eENELCAweDU3LCAweEMwLCAweDdBCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBrYXRfUlNBX1NIQTM4NFtdID0geworKyAgMHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgyNywg MHg0QywgMHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKKysgIDB4RDIsIDB4OTEs IDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcsIDB4 QzcsCisrICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5LCAw eENBLCAweEZBLCAweDVELCAweDVDLAorKyAgMHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhDOCwg MHg0NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKKysgIDB4NjUsIDB4M0Us IDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYsIDB4 Q0YsCisrICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUyLCAw eDE5LCAweDJCLCAweDMwLCAweEMyLAorKyAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0Niwg MHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKKysgIDB4RkYsIDB4OTUs IDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMsIDB4 Q0QsCisrICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3LCAweEVCLCAw eEQwLCAweDhGLCAweDk5LCAweEYxLAorKyAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgwNCwg MHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKKysgIDB4QkQsIDB4MzEs IDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKKyt9OworKworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7CisrICAweDY5LCAweDUyLCAweDFC LCAweDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVELCAweENGLAor KyAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0MCwg MHhGOCwgMHhCMiwgMHg5QSwKKysgIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIs IDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCisrICAweDA0LCAweEMxLCAweDVB LCAweDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4LAor KyAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhBNiwg MHg1MywgMHg2MiwgMHhCNSwKKysgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIs IDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCisrICAweEFGLCAweDYyLCAweDdD LCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2LAor KyAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgxNiwg MHg2MywgMHg4NCwgMHgwNSwKKysgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4Rjcs IDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCisrICAweDNFLCAweDYyLCAweENF LCAweEI1LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkxLAor KyAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAorK307Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKKysg IDB4ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4 NDUsIDB4NEQsIDB4REYsCisrICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1LCAw eDJGLCAweEM5LCAweENELCAweEM0LCAweEIyLCAweDc1LAorKyAgMHg4MCwgMHhBNCwgMHhGMSwg MHg0QSwgMHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywKKysg IDB4MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4 RUUsIDB4QTksIDB4OTcsCisrICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUzLCAw eDYyLCAweDIzLCAweDRCLCAweDM4LCAweEJFLCAweEQ2LAorKyAgMHg1MywgMHgxNSwgMHhGNywg MHhERiwgMHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwKKysg IDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMsIDB4 MEMsIDB4NTksIDB4RDcsCisrICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3LCAw eDAzLCAweDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAorKyAgMHg0OCwgMHhBRiwgMHg4Miwg MHhGRSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwKKysg IDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQsIDB4 MUMsIDB4QjMsIDB4NjcsCisrICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4LCAw eDdELCAweDQ5CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5 MzFfU0hBMjU2W10gPSB7CisrICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0LCAw eDhBLCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAorKyAgMHhFNSwgMHg1MiwgMHgxNSwg MHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwKKysg IDB4RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUsIDB4 OTUsIDB4NzMsIDB4Q0YsCisrICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVFLCAw eDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAorKyAgMHhDNiwgMHg1MywgMHg4OCwg MHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwKKysg IDB4MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQsIDB4 MzgsIDB4MEUsIDB4OTgsCisrICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1LCAw eEE1LCAweDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAorKyAgMHg3RSwgMHg3NSwgMHg4OSwg MHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKKysg IDB4MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUsIDB4 QTEsIDB4NDIsIDB4QkQsCisrICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJDLCAweERCLCAw eDMwLCAweEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAorKyAgMHhFMywgMHhFMiwgMHhFOCwg MHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4MAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0geworKyAgMHg1QywgMHg3RCwgMHg5Niwg MHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwKKysg IDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcsIDB4 MzksIDB4MzcsIDB4Q0IsCisrICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAw eDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAorKyAgMHhFRiwgMHg3OCwgMHg4Mywg MHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwKKysg IDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4 NjYsIDB4RUUsIDB4MzEsCisrICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAw eDdCLCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAorKyAgMHgzRSwgMHg5QywgMHgzNSwg MHg5NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwKKysg IDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4 RDUsIDB4N0MsIDB4RkYsCisrICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAw eEI5LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAorKyAgMHhFRiwgMHgwMSwgMHhFNiwg MHg1RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwKKysg IDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKKyt9OworKwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsKKysg IDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4 M0EsIDB4QzEsIDB4NjMsCisrICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlCLCAweDc5LCAw eERELCAweDRCLCAweEUxLCAweEQ5LCAweERBLCAweEFDLAorKyAgMHhFNywgMHg0NywgMHgwOSwg MHhCMiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywKKysg IDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUsIDB4 RjksIDB4MTQsIDB4MjgsCisrICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRFLCAw eEYyLCAweEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAorKyAgMHg2RSwgMHgyQiwgMHg3OSwg MHg5NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwKKysg IDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAsIDB4 RTAsIDB4RjYsIDB4RDAsCisrICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5LCAw eEJGLCAweDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAorKyAgMHg5RiwgMHgwOSwgMHhDQSwg MHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywKKysg IDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEsIDB4 MzAsIDB4NzEsIDB4MUIsCisrICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1LCAw eDU5LCAweEMzCisrfTsKKysKKysKKytpbnQgRklQU19zZWxmdGVzdF9yc2EoKQorKwl7CisrCWlu dCByZXQgPSAwOworKwlSU0EgKmtleTsKKysJRVZQX1BLRVkgKnBrID0gTlVMTDsKKysKKysJaWYg KChrZXk9UlNBX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCXNldHJzYWtleShrZXkp OworKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisr CUVWUF9QS0VZX2Fzc2lnbl9SU0EocGssIGtleSk7CisrCisrCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNB X1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAorKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTEgUEtDUyMxIikpCisrCQlnb3RvIGVycjsK KysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCisrCQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQpLAor KwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0Eg U0hBMjI0IFBLQ1MjMSIpKQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NI QTI1Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2KSwKKysJCQkJRVZQX3NoYTI1NigpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJCQkiUlNBIFNIQTI1NiBQS0NTIzEiKSkKKysJCWdvdG8g ZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NIQTM4 NCksCisrCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJ IlJTQSBTSEEzODQgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9S U0FfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAorKwkJCQlFVlBfc2hhNTEyKCksIEVW UF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQorKwkJ Z290byBlcnI7CisrCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yoa2F0 X1JTQV9QU1NfU0hBMSksCisrCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNT LAorKwkJCQkiUlNBIFNIQTEgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWth dF9SU0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTIyNCksCisrCQkJCUVWUF9z aGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMjI0IFBTUyIp KQorKwkJZ290byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNpemVv ZihrYXRfUlNBX1BTU19TSEEyNTYpLAorKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxB R19QQURfUFNTLAorKwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAo IWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0g MSwKKysJCQkJa2F0X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0KSwK KysJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBT SEEzODQgUFNTIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NI QTUxMiwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTUxMiksCisrCQkJCUVWUF9zaGE1MTIoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBNTEyIFBTUyIpKQorKwkJZ290byBl cnI7CisrCisrCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBz aXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0X1JT QV9YOTMxX1NIQTEpLAorKwkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwK KysJCQkiUlNBIFNIQTEgWDkzMSIpKQorKwkJZ290byBlcnI7CisrCS8qIE5COiBTSEEyMjQgbm90 IHN1cHBvcnRlZCBpbiBYOS4zMSAqLworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRfUlNBX1g5MzFfU0hBMjU2 LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksCisrCQkJRVZQX3NoYTI1NigpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEEyNTYgWDkzMSIpKQorKwkJZ290byBlcnI7 CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5MzFf U0hBMzg0KSwKKysJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKKysJ CQkiUlNBIFNIQTM4NCBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JT QV9YOTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLAorKwkJCUVWUF9zaGE1 MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKwkJCSJSU0EgU0hBNTEyIFg5MzEiKSkK KysJCWdvdG8gZXJyOworKworKworKwlyZXQgPSAxOworKworKwllcnI6CisrCWlmIChwaykKKysJ CUVWUF9QS0VZX2ZyZWUocGspOworKwllbHNlIGlmIChrZXkpCisrCQlSU0FfZnJlZShrZXkpOwor KwlyZXR1cm4gcmV0OworKwl9CisrCisrI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYworLS0tIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV94 OTMxZy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDI4 MSBAQAorKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1 LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3Jp dHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1w bGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBT U0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5v bi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25z IGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8g YWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwK KysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUg U1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlz IGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhl IGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29w eXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5v dGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhp cyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZl biBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJy YXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3Nh Z2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9y IHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29m dHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSki CisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUg cm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0 b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mg c3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhl IGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFj a25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdy aXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5Z IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAq IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsg TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3Ry aWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysg KiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBj b2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRp c3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNl Ll0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrCisrZXh0ZXJuIGludCBmaXBzX2No ZWNrX3JzYShSU0EgKnJzYSk7CisrI2VuZGlmCisrCisrLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0 aW9uIGFuZCBnZW5lcmF0aW9uICovCisrCisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJz YSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKKysJCQlj b25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisr CQkJY29uc3QgQklHTlVNICpYcTEsIGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhx LAorKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCUJJR05VTSAqcjA9 TlVMTCwqcjE9TlVMTCwqcjI9TlVMTCwqcjM9TlVMTDsKKysJQk5fQ1RYICpjdHg9TlVMTCwqY3R4 Mj1OVUxMOworKworKwlpZiAoIXJzYSkgCisrCQlnb3RvIGVycjsKKysKKysJY3R4ID0gQk5fQ1RY X25ldygpOworKwlpZiAoIWN0eCkgCisrCQlnb3RvIGVycjsKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7 CisrCisrCXIwID0gQk5fQ1RYX2dldChjdHgpOworKwlyMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJ cjIgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIzID0gQk5fQ1RYX2dldChjdHgpOworKworKwlpZiAo cjMgPT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIXJzYS0+ZSkKKysJCXsKKysJCXJzYS0+ ZSA9IEJOX2R1cChlKTsKKysJCWlmICghcnNhLT5lKQorKwkJCWdvdG8gZXJyOworKwkJfQorKwll bHNlCisrCQllID0gcnNhLT5lOworKworKwkvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2Vu dCBvbmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KKysJICogVGhpcyBhbGxvd3MgdGVzdCBwcm9n cmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCisrCSAqLworKworKwlpZiAoWHAg JiYgIXJzYS0+cCkKKysJCXsKKysJCXJzYS0+cCA9IEJOX25ldygpOworKwkJaWYgKCFyc2EtPnAp CisrCQkJZ290byBlcnI7CisrCisrCQlpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+ cCwgcDEsIHAyLAorKwkJCQkJWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKKysJCQlnb3RvIGVy cjsKKysJCX0KKysKKysJaWYgKFhxICYmICFyc2EtPnEpCisrCQl7CisrCQlyc2EtPnEgPSBCTl9u ZXcoKTsKKysJCWlmICghcnNhLT5xKQorKwkJCWdvdG8gZXJyOworKwkJaWYgKCFCTl9YOTMxX2Rl cml2ZV9wcmltZV9leChyc2EtPnEsIHExLCBxMiwKKysJCQkJCVhxLCBYcTEsIFhxMiwgZSwgY3R4 LCBjYikpCisrCQkJZ290byBlcnI7CisrCQl9CisrCisrCWlmICghcnNhLT5wIHx8ICFyc2EtPnEp CisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJcmV0 dXJuIDI7CisrCQl9CisrCisrCS8qIFNpbmNlIGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5v dyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAKKysJICogY29tcG9uZW50cy4KKysJICovCisrCisr CS8qIGNhbGN1bGF0ZSBuICovCisrCXJzYS0+bj1CTl9uZXcoKTsKKysJaWYgKHJzYS0+biA9PSBO VUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbXVsKHJzYS0+bixyc2EtPnAscnNhLT5xLGN0 eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGQgKi8KKysJaWYgKCFCTl9zdWIo cjEscnNhLT5wLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBwLTEgKi8KKysJaWYg KCFCTl9zdWIocjIscnNhLT5xLEJOX3ZhbHVlX29uZSgpKSkKKysJCWdvdG8gZXJyOwkvKiBxLTEg Ki8KKysJaWYgKCFCTl9tdWwocjAscjEscjIsY3R4KSkKKysJCWdvdG8gZXJyOwkvKiAocC0xKShx LTEpICovCisrCisrCWlmICghQk5fZ2NkKHIzLCByMSwgcjIsIGN0eCkpCisrCQlnb3RvIGVycjsK KysKKysJaWYgKCFCTl9kaXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKKysJCWdvdG8gZXJyOwkv KiBMQ00oKHAtMSkocS0xKSkgKi8KKysKKysJY3R4MiA9IEJOX0NUWF9uZXcoKTsKKysJaWYgKCFj dHgyKQorKwkJZ290byBlcnI7CisrCisrCXJzYS0+ZD1CTl9tb2RfaW52ZXJzZShOVUxMLHJzYS0+ ZSxyMCxjdHgyKTsJLyogZCAqLworKwlpZiAocnNhLT5kID09IE5VTEwpCisrCQlnb3RvIGVycjsK KysKKysJLyogY2FsY3VsYXRlIGQgbW9kIChwLTEpICovCisrCXJzYS0+ZG1wMT1CTl9uZXcoKTsK KysJaWYgKHJzYS0+ZG1wMSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghQk5fbW9kKHJz YS0+ZG1wMSxyc2EtPmQscjEsY3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUg ZCBtb2QgKHEtMSkgKi8KKysJcnNhLT5kbXExPUJOX25ldygpOworKwlpZiAocnNhLT5kbXExID09 IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2QocnNhLT5kbXExLHJzYS0+ZCxyMixj dHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAg Ki8KKysJcnNhLT5pcW1wPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5xLHJzYS0+cCxjdHgyKTsK KysKKysJZXJyOgorKwlpZiAoY3R4KQorKwkJeworKwkJQk5fQ1RYX2VuZChjdHgpOworKwkJQk5f Q1RYX2ZyZWUoY3R4KTsKKysJCX0KKysJaWYgKGN0eDIpCisrCQlCTl9DVFhfZnJlZShjdHgyKTsK KysJLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwgKi8KKysJaWYgKHJzYSAm JiByc2EtPmlxbXAgIT0gTlVMTCkKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJ fQorKworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBj b25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgb2sgPSAwOworKwlCSUdO VU0gKlhwID0gTlVMTCwgKlhxID0gTlVMTDsKKysJQk5fQ1RYICpjdHggPSBOVUxMOworKworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RV TFVTX0JJVFMpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFU RV9LRVlfRVgsRklQU19SX0tFWV9UT09fU0hPUlQpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9 CisrCisrCWlmIChiaXRzICYgMHhmZikKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JT QV9YOTMxX0dFTkVSQVRFX0tFWV9FWCxGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIKTsKKysJICAg IHJldHVybiAwOworKwkgICAgfQorKworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkg ICAgeworKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gMDsKKysJICAgIH0KKysjZW5k aWYKKysKKysJY3R4ID0gQk5fQ1RYX25ldygpOworKwlpZiAoIWN0eCkKKysJCWdvdG8gZXJyb3I7 CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlYcCA9IEJOX0NUWF9nZXQoY3R4KTsKKysJWHEg PSBCTl9DVFhfZ2V0KGN0eCk7CisrCWlmICghQk5fWDkzMV9nZW5lcmF0ZV9YcHEoWHAsIFhxLCBi aXRzLCBjdHgpKQorKwkJZ290byBlcnJvcjsKKysKKysJcnNhLT5wID0gQk5fbmV3KCk7CisrCXJz YS0+cSA9IEJOX25ldygpOworKwlpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQorKwkJZ290byBlcnJv cjsKKysKKysJLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhwLCBYcSAqLworKworKwlpZiAo IUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM LCBYcCwKKysJCQkJCWUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFCTl9Y OTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHEs CisrCQkJCQllLCBjdHgsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrCS8qIFNpbmNlIHJzYS0+ cCBhbmQgcnNhLT5xIGFyZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRlcml2ZQorKwkgKiBy ZW1haW5pbmcgUlNBIGNvbXBvbmVudHMuCisrCSAqLworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2 ZV9leChyc2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisrCQkJCU5VTEwsIE5VTEwsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKKysJCWdvdG8gZXJyb3I7CisrCisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlpZighZmlwc19jaGVja19yc2EocnNhKSkKKysJICAgIGdvdG8gZXJyb3I7 CisrI2VuZGlmCisrCisrCW9rID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChjdHgpCisrCQl7Cisr CQlCTl9DVFhfZW5kKGN0eCk7CisrCQlCTl9DVFhfZnJlZShjdHgpOworKwkJfQorKworKwlpZiAo b2spCisrCQlyZXR1cm4gMTsKKysKKysJcmV0dXJuIDA7CisrCisrCX0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEu MC4wL2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMC9j cnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3NoYTFf c2VsZnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCAr MSw5OSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytz dGF0aWMgY2hhciB0ZXN0W11bNjBdPQorKyAgICB7CisrICAgICIiLAorKyAgICAiYWJjIiwKKysg ICAgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bu b3BxIgorKyAgICB9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9E SUdFU1RfTEVOR1RIXT0KKysgICAgeworKyAgICB7IDB4ZGEsMHgzOSwweGEzLDB4ZWUsMHg1ZSww eDZiLDB4NGIsMHgwZCwweDMyLDB4NTUsCisrICAgICAgMHhiZiwweGVmLDB4OTUsMHg2MCwweDE4 LDB4OTAsMHhhZiwweGQ4LDB4MDcsMHgwOSB9LAorKyAgICB7IDB4YTksMHg5OSwweDNlLDB4MzYs MHg0NywweDA2LDB4ODEsMHg2YSwweGJhLDB4M2UsCisrICAgICAgMHgyNSwweDcxLDB4NzgsMHg1 MCwweGMyLDB4NmMsMHg5YywweGQwLDB4ZDgsMHg5ZCB9LAorKyAgICB7IDB4ODQsMHg5OCwweDNl LDB4NDQsMHgxYywweDNiLDB4ZDIsMHg2ZSwweGJhLDB4YWUsCisrICAgICAgMHg0YSwweGExLDB4 ZjksMHg1MSwweDI5LDB4ZTUsMHhlNSwweDQ2LDB4NzAsMHhmMSB9LAorKyAgICB9OworKworK3Zv aWQgRklQU19jb3JydXB0X3NoYTEoKQorKyAgICB7CisrICAgIHRlc3RbMl1bMF0rKzsKKysgICAg fQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQorKyAgICB7CisrICAgIGludCBuOworKwor KyAgICBmb3Iobj0wIDsgbjxzaXplb2YodGVzdCkvc2l6ZW9mKHRlc3RbMF0pIDsgKytuKQorKwl7 CisrCXVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOworKworKwlFVlBfRGlnZXN0 KHRlc3Rbbl0sc3RybGVuKHRlc3Rbbl0pLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKTsKKysJ aWYobWVtY21wKG1kLHJldFtuXSxzaXplb2YgbWQpKQorKwkgICAgeworKwkgICAgRklQU2VycihG SVBTX0ZfRklQU19TRUxGVEVTVF9TSEExLEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwkgICAg cmV0dXJuIDA7CisrCSAgICB9CisrCX0KKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysjZW5k aWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3No YTEuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEu YworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX3NoYTEuYy5m aXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDE3MyBAQAorKy8qID09PT09PT09PT09PT09PT09 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 KyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5j bHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9zaGEuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrCisrI2lm bmRlZiBGSVBTQ0FOSVNURVJfTworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpIHsgcmV0dXJu IDA7IH0KKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQorK3ZvaWQgT1BFTlNTTF9jbGVh bnNlKHZvaWQgKnAsc2l6ZV90IGxlbikge30KKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCisrc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQV9DVFggKm1kX2N0eCxTSEFfQ1RYICpv X2N0eCwKKysJCSAgICAgIGNvbnN0IGNoYXIgKmtleSkKKysgICAgeworKyAgICBzaXplX3QgbGVu PXN0cmxlbihrZXkpOworKyAgICBpbnQgaTsKKysgICAgdW5zaWduZWQgY2hhciBrZXltZFtITUFD X01BWF9NRF9DQkxPQ0tdOworKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtITUFDX01BWF9NRF9DQkxP Q0tdOworKworKyAgICBpZiAobGVuID4gU0hBX0NCTE9DSykKKysJeworKwlTSEExX0luaXQobWRf Y3R4KTsKKysJU0hBMV9VcGRhdGUobWRfY3R4LGtleSxsZW4pOworKwlTSEExX0ZpbmFsKGtleW1k LG1kX2N0eCk7CisrCWxlbj0yMDsKKysJfQorKyAgICBlbHNlCisrCW1lbWNweShrZXltZCxrZXks bGVuKTsKKysgICAgbWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxl bik7CisrCisrICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQorKwlw YWRbaV09MHgzNl5rZXltZFtpXTsKKysgICAgU0hBMV9Jbml0KG1kX2N0eCk7CisrICAgIFNIQTFf VXBkYXRlKG1kX2N0eCxwYWQsU0hBX0NCTE9DSyk7CisrCisrICAgIGZvcihpPTAgOyBpIDwgSE1B Q19NQVhfTURfQ0JMT0NLIDsgaSsrKQorKwlwYWRbaV09MHg1Y15rZXltZFtpXTsKKysgICAgU0hB MV9Jbml0KG9fY3R4KTsKKysgICAgU0hBMV9VcGRhdGUob19jdHgscGFkLFNIQV9DQkxPQ0spOwor KyAgICB9CisrCisrc3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25lZCBjaGFyICptZCxTSEFf Q1RYICptZF9jdHgsU0hBX0NUWCAqb19jdHgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBi dWZbMjBdOworKworKyAgICBTSEExX0ZpbmFsKGJ1ZixtZF9jdHgpOworKyAgICBTSEExX1VwZGF0 ZShvX2N0eCxidWYsc2l6ZW9mIGJ1Zik7CisrICAgIFNIQTFfRmluYWwobWQsb19jdHgpOworKyAg ICB9CisrCisrI2VuZGlmCisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisrICAg IHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIHN0YXRpYyBjaGFyIGtleVtdPSJldGFvbnJp c2hkbGN1cGZtIjsKKysgICAgaW50IG4sYmluYXJ5PTA7CisrCisrICAgIGlmKGFyZ2MgPCAyKQor Kwl7CisrCWZwcmludGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7CisrCWV4aXQo MSk7CisrCX0KKysKKysgICAgbj0xOworKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5 IikpCisrCXsKKysJbisrOworKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQu Li4gKi8KKysJfQorKworKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKKysJeworKwlGSUxFICpm PWZvcGVuKGFyZ3Zbbl0sInJiIik7CisrCVNIQV9DVFggbWRfY3R4LG9fY3R4OworKwl1bnNpZ25l ZCBjaGFyIG1kWzIwXTsKKysJaW50IGk7CisrCisrCWlmKCFmKQorKwkgICAgeworKwkgICAgcGVy cm9yKGFyZ3Zbbl0pOworKwkgICAgZXhpdCgyKTsKKysJICAgIH0KKysKKysJaG1hY19pbml0KCZt ZF9jdHgsJm9fY3R4LGtleSk7CisrCWZvciggOyA7ICkKKysJICAgIHsKKysJICAgIGNoYXIgYnVm WzEwMjRdOworKwkgICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1ZixmKTsKKysKKysJ ICAgIGlmKGwgPT0gMCkKKysJCXsKKysJCWlmKGZlcnJvcihmKSkKKysJCSAgICB7CisrCQkgICAg cGVycm9yKGFyZ3Zbbl0pOworKwkJICAgIGV4aXQoMyk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJ ICAgIGJyZWFrOworKwkJfQorKwkgICAgU0hBMV9VcGRhdGUoJm1kX2N0eCxidWYsbCk7CisrCSAg ICB9CisrCWhtYWNfZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOworKworKwlpZiAoYmluYXJ5KQor KwkgICAgeworKwkgICAgZndyaXRlKG1kLDIwLDEsc3Rkb3V0KTsKKysJICAgIGJyZWFrOwkvKiAu Li4gZm9yIHNpbmdsZSghKSBmaWxlICovCisrCSAgICB9CisrCisrCXByaW50ZigiSE1BQy1TSEEx KCVzKT0gIixhcmd2W25dKTsKKysJZm9yKGk9MCA7IGkgPCAyMCA7ICsraSkKKysJICAgIHByaW50 ZigiJTAyeCIsbWRbaV0pOworKwlwcmludGYoIlxuIik7CisrCX0KKysjZW5kaWYKKysgICAgcmV0 dXJuIDA7CisrICAgIH0KKysKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Zmlwc190ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfdGVz dF9zdWl0ZS5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUu Yy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAw MDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw1ODggQEAKKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqCisrICogVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2 ZXIgZm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5nCisrICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAg dmFsaWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQorKyAqIE9wZW5TU0wg bGlicmFyeSBpdG8gcGVyZm9ybSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKKysg KiBmdW5jdGlvbnMuICBBIHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVs aWJlcmF0ZWx5CisrICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKKysg KgorKyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgorKyAqCisrICovCisrI2luY2x1 ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZGguaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJ UFMKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorKyAgICB7CisrICAgIHByaW50 ZigiTm8gRklQUyBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworKyAgICB9CisrI2Vsc2UK KysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisr CisrLyogQUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJl c3VsdCBtYXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAorKyovCisrc3RhdGljIGludCBGSVBTX2Fl c190ZXN0KHZvaWQpCisrCXsKKysJaW50IHJldCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgcGx0bXBb MTZdOworKwl1bnNpZ25lZCBjaGFyIGNpdG1wWzE2XTsKKysJdW5zaWduZWQgY2hhciBrZXlbMTZd ID0geyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNn07CisrCXVuc2lnbmVk IGNoYXIgcGxhaW50ZXh0WzE2XSA9ICJldGFvbnJpc2hkbGN1IjsKKysJRVZQX0NJUEhFUl9DVFgg Y3R4OworKwlFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKwlpZiAoRVZQX0NpcGhlckluaXRf ZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQorKwkJ Z290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOworKwlp ZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBO VUxMLCAwKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNp dG1wLCAxNik7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQorKwkJZ290byBl cnI7CisrCXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsK KysJcmV0dXJuIHJldDsKKysJfQorKworK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkK KysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKKysJdW5zaWdu ZWQgY2hhciBjaXRtcFs4XTsKKysgICAgCXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEsMiwzLDQs NSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LAorKwkJICAgICAgICAgICAgICAx OSwyMCwyMSwyMiwyMywyNH07CisrICAgIAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAn ZScsICd0JywgJ2EnLCAnbycsICduJywgJ3InLCAnaScsICdzJyB9OworKwlFVlBfQ0lQSEVSX0NU WCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCWlmIChFVlBfQ2lwaGVySW5p dF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQor KwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7Cisr CWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5 LCBOVUxMLCAwKSA8PSAwKQorKwkJZ290byBlcnI7CisrCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAs IGNpdG1wLCA4KTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKKysJCWdvdG8g ZXJyOworKwlyZXQgPSAxOworKwllcnI6CisrCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7 CisrCXJldHVybiByZXQ7CisrCX0KKysKKysvKgorKyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQg c2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KKysgKi8KKytzdGF0aWMgaW50IEZJUFNfZHNh X3Rlc3QoaW50IGJhZCkKKysgICAgeworKyAgICBEU0EgKmRzYSA9IE5VTEw7CisrICAgIEVWUF9Q S0VZIHBrOworKyAgICB1bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOworKyAg ICB1bnNpZ25lZCBjaGFyIGJ1Zls2MF07CisrICAgIHVuc2lnbmVkIGludCBzbGVuOworKyAgICBp bnQgciA9IDA7CisrICAgIEVWUF9NRF9DVFggbWN0eDsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9y KCk7CisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrICAgIGRzYSA9IERTQV9uZXcoKTsK KysgICAgaWYgKCFkc2EpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJh bWV0ZXJzX2V4KGRzYSwgMTAyNCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQorKwlnb3RvIGVuZDsK KysgICAgaWYgKCFEU0FfZ2VuZXJhdGVfa2V5KGRzYSkpCisrCWdvdG8gZW5kOworKyAgICBpZiAo YmFkKQorKwkgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKKysKKysgICAgcGsudHlw ZSA9IEVWUF9QS0VZX0RTQTsKKysgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCisrICAgIGlmICgh RVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7Cisr ICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQor Kwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAm cGspKQorKwlnb3RvIGVuZDsKKysKKysgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwg RVZQX2RzczEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRh dGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgciA9 IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOworKyAgICBlbmQ6CisrICAg IEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAgIGlmIChkc2EpCisrICAJICBEU0FfZnJl ZShkc2EpOworKyAgICBpZiAociAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7Cisr ICAgIH0KKysKKysvKgorKyAqIFJTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlu cHV0IHBsYWludGV4dC4KKysgKi8KKytzdGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkK KysgICAgeworKyAgICBSU0EgKmtleTsKKysgICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtd ID0gImV0YW9ucmlzaGRsYyI7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisrICAgIHVu c2lnbmVkIGludCBzbGVuOworKyAgICBCSUdOVU0gKmJuOworKyAgICBFVlBfTURfQ1RYIG1jdHg7 CisrICAgIEVWUF9QS0VZIHBrOworKyAgICBpbnQgciA9IDA7CisrCisrICAgIEVSUl9jbGVhcl9l cnJvcigpOworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAgICBrZXkgPSBSU0FfbmV3 KCk7CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFibikKKysJcmV0dXJu IDA7CisrICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7CisrICAgIGlmICghUlNBX2dlbmVyYXRl X2tleV9leChrZXksIDEwMjQsYm4sTlVMTCkpCisrCXJldHVybiAwOworKyAgICBCTl9mcmVlKGJu KTsKKysgICAgaWYgKGJhZCkKKysJICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7CisrCisrICAg IHBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrICAgIHBrLnBrZXkucnNhID0ga2V5OworKworKyAg ICBpZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCisrCWdvdG8g ZW5kOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9m KGlucHV0X3B0ZXh0KSAtIDEpKQorKwlnb3RvIGVuZDsKKysgICAgaWYgKCFFVlBfU2lnbkZpbmFs KCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQorKwlnb3RvIGVuZDsKKysKKysgICAgaWYgKCFFVlBf VmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCisrCWdvdG8gZW5kOworKyAg ICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRf cHRleHQpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4 LCBidWYsIHNsZW4sICZwayk7CisrICAgIGVuZDoKKysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZt Y3R4KTsKKysgICAgaWYgKGtleSkKKysgIAkgICAgUlNBX2ZyZWUoa2V5KTsKKysgICAgaWYgKHIg IT0gMSkKKysJcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hBMTog Z2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24K KysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGEx X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVO R1RIXSA9CisrICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4 MWUsIDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMs IDB4ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJl dGFvbnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07 CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNp emVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAwOworKyAg ICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOwor KyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBr bm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBj b3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCisrICAgIHsK KysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KKysJezB4 ZjUsIDB4NTMsIDB4Y2QsIDB4YjgsIDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5Mywg MHhjOSwgMHg2OCwgMHhjMCwgMHhlYSwgMHg0MCwgMHg5MSwKKysJIDB4NiwgMHhlYywgMHg4ZSwg MHgxMSwgMHg5NiwgMHhjOCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1 MCwgMHg0ZiwgMHg0NywgMHg1N307CisrICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25y aXNoZCI7CisrCisrICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwor KworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXpl b2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAwOworKyAg ICBpZiAobWVtY21wKG1kLGRpZ2VzdCxzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOwor KyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBr bm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBj b3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCisrICAgIHsK KysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KKysJezB4 OTksIDB4YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgs IDB4NWYsIDB4OTQsIDB4NzEsIDB4NjQsIDB4MjgsIDB4Y2EsCisrCSAweDE2LCAweDFmLCAweDNk LCAweGY0LCAweDFmLCAweGYzLCAweDBmLCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAweGQwLCAw eGU3LCAweDBiLCAweDk0LCAweDRhLAorKwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwg MHgwNiwgMHhlZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0 MCwgMHgyMiwKKysJIDB4NDksIDB4NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4 ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsIDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9OworKyAg ICB1bnNpZ25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBj aGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7 CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBf c2hhNTEyKCksIE5VTEwpKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6 ZW9mKG1kKSkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysK KysvKiBITUFDLVNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBj b21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0 aWMgaW50IEZJUFNfaG1hY19zaGExX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIg a2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUg dGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsw eDczLCAweGY3LCAweGEwLCAweDQ4LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVh LCAweGVhLCAweDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAorKwkgMHhiMiwgMHhmYiwgMHhl YywgMHhjNn07CisrCisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Cisr ICAgIHVuc2lnbmVkIGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAg ICBpZiAoIUhNQUMoRVZQX3NoYTEoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEs b3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVu KSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIEhN QUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFy ZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGlu dCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5 W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4 dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrCXsweDc1 LCAweDU4LCAweGQ1LCAweGJkLCAweDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAw eGJlLCAweDFjLCAweGIyLCAweGYwLCAweDIwLCAweDM1LAorKwkgMHhlNSwgMHg2MiwgMHg0OSwg MHhiNiwgMHg5NCwgMHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOX07Cisr CisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVk IGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMo RVZQX3NoYTIyNCgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxl bikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAg ICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogSE1BQy1TSEEyNTY6 IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3du CisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1h Y19zaGEyNTZfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFv bnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKKysgICAg dW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4ZTksIDB4MTcsIDB4 YzEsIDB4N2IsIDB4NGMsIDB4NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIs IDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCisrCSAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdl LCAweGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAweGRhLCAw eDI0LCAweGY0fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsK KysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7Cisr ICAgIGlmICghSE1BQyhFVlBfc2hhMjU2KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2 KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91 dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysv KiBITUFDLVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNv bXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRp YyBpbnQgRklQU19obWFjX3NoYTM4NF90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFy IGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxl IHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7 MHhiMiwgMHg5ZCwgMHg0MCwgMHg1OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2 MywgMHgwOCwgMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwgMHgxMCwKKysJIDB4ZTIsIDB4ZGYsIDB4 ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMs IDB4YjAsIDB4MDcsIDB4MzksIDB4MDgsCisrCSAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2 LCAweGQ2LCAweDRjLCAweDIwLCAweGZiLCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAweDliLCAw eDg4LCAweDFjfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsK KysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7Cisr ICAgIGlmICghSE1BQyhFVlBfc2hhMzg0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2 KS0xLG91dCwmb3V0bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91 dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysv KiBITUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNv bXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRp YyBpbnQgRklQU19obWFjX3NoYTUxMl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFy IGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxl IHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7 MHhjZCwgMHgzZSwgMHhiOSwgMHg1MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhh ZiwgMHhmMywgMHg3NywgMHg1OSwgMHg4NSwgMHhhOSwgMHhlNiwKKysJIDB4ZjcsIDB4ZDEsIDB4 NTEsIDB4OTYsIDB4MTcsIDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQs IDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCisrCSAweGQ3LCAweDc5LCAweDBhLCAweGE1LCAweGVh LCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAweDdmLCAw eGViLCAweDljLAorKwkgMHg0NywgMHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwg MHhlZSwgMHg0NiwgMHg2OSwgMHg5NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1M307Cisr CisrICAgIHVuc2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIHVuc2lnbmVk IGludCBvdXRsZW47CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUhNQUMo RVZQX3NoYTUxMigpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxl bikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQorKyAgICAg ICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrCisrLyogREg6IGdlbmVy YXRlIHNoYXJlZCBwYXJhbWV0ZXJzCisrKi8KKytzdGF0aWMgaW50IGRoX3Rlc3QoKQorKyAgICB7 CisrICAgIERIICpkaDsKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGRoID0gRklQU19k aF9uZXcoKTsKKysgICAgaWYgKCFkaCkKKysJcmV0dXJuIDA7CisrICAgIGlmICghREhfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChkaCwgMTAyNCwgMiwgTlVMTCkpCisrCXJldHVybiAwOworKyAgICBG SVBTX2RoX2ZyZWUoZGgpOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKy8qIFplcm9pemUK KysqLworK3N0YXRpYyBpbnQgWmVyb2l6ZSgpCisrICAgIHsKKysgICAgUlNBICprZXk7CisrICAg IEJJR05VTSAqYm47CisrICAgIHVuc2lnbmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKKysJeyAweDQ4 LCAweDUwLCAweGYwLCAweGEzLCAweDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAw eDdmLCAweDgzLCAweDAyLCAweGIxLCAweDA5LCAweDY4IH07CisrICAgIGludCBpLCBuOworKwor KyAgICBrZXkgPSBGSVBTX3JzYV9uZXcoKTsKKysgICAgYm4gPSBCTl9uZXcoKTsKKysgICAgaWYg KCFrZXkgfHwgIWJuKQorKwlyZXR1cm4gMDsKKysgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsK KysgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKKysJcmV0 dXJuIDA7CisrICAgIEJOX2ZyZWUoYm4pOworKyAgICAKKysgICAgbiA9IEJOX251bV9ieXRlcyhr ZXktPmQpOworKyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlc biIsIG4pOworKyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOwor KyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrICAgIEJOX3JhbmQoa2V5LT5kLG4q OCwtMSwwKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOwor KyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrCisrICAgIHByaW50ZigiXHRjaGFy IGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKKysgICAgZm9yKGkgPSAw OyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwor KyAgICAgICAgcHJpbnRmKCJcbiIpOworKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1 c2Vya2V5KTsKKysgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGlu ZzogXG5cdFx0Iik7CisrICAgIGZvcihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBw cmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAgICAgIHByaW50ZigiXG4iKTsKKysKKysg ICAgcmV0dXJuIDE7CisrICAgIH0KKysKKytzdGF0aWMgaW50IEVycm9yOworK2NvbnN0IGNoYXIg KiBGYWlsKGNvbnN0IGNoYXIgKm1zZykKKysgICAgeworKyAgICBkb19wcmludF9lcnJvcnMoKTsK KysgICAgRXJyb3IrKzsKKysgICAgcmV0dXJuIG1zZzsgCisrICAgIH0KKysKKytpbnQgbWFpbihp bnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKworKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ff a2V5Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKKysgICAgaW50IGJhZF9yc2Eg PSAwLCBiYWRfZHNhID0gMDsKKysgICAgaW50IGRvX3JuZ19zdGljayA9IDA7CisrICAgIGludCBu b19leGl0ID0gMDsKKysKKysgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9u XG5cbiIpOworKworKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBh bnkgKi8KKysgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKKysKKysgICAgaWYgKGFy Z3ZbMV0pIHsKKysgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KKysgICAgICAgIGlm ICghc3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9h ZXMoKTsKKysgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0 aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAiZGVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7CisrICAgICAg ICAgICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0 ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNh IikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7CisrICAgICAgICAgICAgcHJp bnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29y cnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwg InJzYSIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYSgpOworKyAgICAgICAgICAg IHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRo IGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJyc2FrZXkiKSkgeworKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9u IGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOworKwkg ICAgYmFkX3JzYSA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgIH0gZWxzZSBpZiAo IXN0cmNtcChhcmd2WzFdLCAicnNha2V5Z2VuIikpIHsKKysJICAgIGRvX2NvcnJ1cHRfcnNhX2tl eWdlbiA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgICAgICBwcmludGYoIlJTQSBr ZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5 Z2VuLi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5 IikpIHsKKysgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0 dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysJICAgIGJhZF9kc2Eg PSAxOworKwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJn dlsxXSwgImRzYWtleWdlbiIpKSB7CisrCSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOwor KwkgICAgbm9fZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRp b24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7 CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgeworKyAgICAg ICAgICAgIEZJUFNfY29ycnVwdF9zaGExKCk7CisrICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBo YXNoIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAicm5nIikpIHsKKysJICAgIEZJUFNfY29ycnVwdF9ybmcoKTsKKysJfSBlbHNlIGlmICgh c3RyY21wKGFyZ3ZbMV0sICJybmdzdGljayIpKSB7CisrCSAgICBkb19ybmdfc3RpY2sgPSAxOwor KwkgICAgbm9fZXhpdCA9IDE7CisrCSAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29u dGludW91cyB0ZXN0Li4uXG4iKTsKKysgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgcHJp bnRmKCJCYWQgYXJndW1lbnQgXCIlc1wiXG4iLCBhcmd2WzFdKTsKKysgICAgICAgICAgICBleGl0 KDEpOworKyAgICAgICAgfQorKwlpZiAoIW5vX2V4aXQpIHsKKysgICAgICAgIAlpZiAoIUZJUFNf bW9kZV9zZXQoMSkpIHsKKysgCQkgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAgICAJICAg IHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7CisrCQkgICAgZXhpdCgxKTsK KysJCX0KKysgICAgICAgIAlwcmludGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4i KTsKKysgICAgICAgIAlleGl0KDApOworKwl9CisrICAgIH0KKysKKysgICAgLyogTm9uLUFwcHJv dmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICovCisrICAgIHByaW50ZigiMS4gTm9u LUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOworKyAgICBwcmlu dGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7CisrICAgIHByaW50ZiggZGhf dGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAg LyogUG93ZXItdXAgc2VsZiB0ZXN0CisrICAgICovCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOwor KyAgICBwcmludGYoIjIuIEF1dG9tYXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsKKysgICAg aWYgKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vycm9ycygpOworKyAgICAg ICAgcHJpbnRmKEZhaWwoIkZBSUxFRCFcbiIpKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBwcmlu dGYoInN1Y2Nlc3NmdWxcbiIpOworKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQorKyAg ICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKCk7CisrICAgIGlmIChkb19jb3JydXB0 X3JzYV9rZXlnZW4pCisrICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKKysg ICAgaWYgKGRvX3JuZ19zdGljaykKKysgICAgICAgICAgICBGSVBTX3JuZ19zdGljaygpOworKwor KyAgICAvKiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICovCisrICAgIHByaW50Zigi My4gQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfYWVz X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAg IC8qIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICov CisrICAgIHByaW50ZigiNC4gUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5 cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nl c3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogREVTLUNCQyBlbmNy eXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5 cHRpb24vZGVjcnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0KCkgPyAi c3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBEU0Ega2V5 IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uCisrICAgICovCisrICAgIHByaW50 ZigiNi4gRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOwor KyAgICBwcmludGYoIEZJUFNfZHNhX3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBG YWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBTSEEtMSBoYXNoCisrICAgICovCisrICAg IHByaW50ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVz dCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyog U0hBLTI1NiBoYXNoCisrICAgICovCisrICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIp OworKyAgICBwcmludGYoIEZJUFNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZh aWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS01MTIgaGFzaAorKyAgICAqLworKyAg ICBwcmludGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX3NoYTUx Ml90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAg ICAvKiBITUFDLVNIQS0xIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEt MSBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nl c3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMjI0 IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsK KysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDog IEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNoCisrICAg ICovCisrICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7CisrICAgIHByaW50 ZiggRklQU19obWFjX3NoYTI1Nl90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlM RUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0zODQgaGFzaAorKyAgICAqLworKyAgICBw cmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1h Y19zaGEzODRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsK KysKKysgICAgLyogSE1BQy1TSEEtNTEyIGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3aC4g SE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rl c3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8q IE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbgorKyAgICAqLworKyAgICBwcmlu dGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsK KysgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOworKyAgICBw cmludGYoIGRoX3Rlc3QoKSA/ICJzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCisrCSAgICA6IEZh aWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpICk7CisrCisrICAgIC8qIFplcm9pemF0aW9uCisr ICAgICovCisrICAgIHByaW50ZigiOS4gWmVyby1pemF0aW9uLi4uXG4iKTsKKysgICAgcHJpbnRm KCBaZXJvaXplKCkgPyAiXHRzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCisrCSAgICA6IEZhaWwo Ilx0ZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysKKysgICAgcHJpbnRmKCJcbkFsbCB0ZXN0 cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVycm9yKTsKKysgICAgcmV0dXJuIEVycm9y ID8gMSA6IDA7CisrICAgIH0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19sb2NsLmgKKy0t LSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2xvY2wuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6 NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19sb2NsLmgJ MjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNzIgQEAKKysv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRp b24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrI2lm ZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyNlbmRpZgorKworK3ZvaWQgZmlwc193 X2xvY2sodm9pZCk7Cisrdm9pZCBmaXBzX3dfdW5sb2NrKHZvaWQpOworK3ZvaWQgZmlwc19yX2xv Y2sodm9pZCk7Cisrdm9pZCBmaXBzX3JfdW5sb2NrKHZvaWQpOworK2ludCBmaXBzX2lzX3N0YXJ0 ZWQodm9pZCk7Cisrdm9pZCBmaXBzX3NldF9zdGFydGVkKHZvaWQpOworK2ludCBmaXBzX2lzX293 bmluZ190aHJlYWQodm9pZCk7CisraW50IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCk7Cisr dm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpOworK2ludCBmaXBzX2NsZWFyX293bmlu Z190aHJlYWQodm9pZCk7CisrCisrI2RlZmluZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9TSVpFCTE2 CisrCisrI2lmZGVmICBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9maXBzL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9NYWtlZmls ZS5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZmlwcy9NYWtlZmlsZQkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCAr MDIwMAorQEAgLTAsMCArMSw4MSBAQAorKyMKKysjIE9wZW5TU0wvY3J5cHRvL2ZpcHMvTWFrZWZp bGUKKysjCisrCisrRElSPQlmaXBzCisrVE9QPQkuLi8uLgorK0NDPQljYworK0lOQ0xVREVTPQor K0NGTEFHPS1nCisrTUFLRUZJTEU9CU1ha2VmaWxlCisrQVI9CQlhciByCisrCisrQ0ZMQUdTPSAk KElOQ0xVREVTKSAkKENGTEFHKQorKworK0dFTkVSQUw9TWFrZWZpbGUKKytURVNUPWZpcHNfdGVz dF9zdWl0ZS5jIGZpcHNfcmFuZHRlc3QuYworK0FQUFM9CisrCisrTElCPSQoVE9QKS9saWJjcnlw dG8uYQorK0xJQlNSQz1maXBzX2Flc19zZWxmdGVzdC5jIGZpcHNfZGVzX3NlbGZ0ZXN0LmMgZmlw c19obWFjX3NlbGZ0ZXN0LmMgZmlwc19yYW5kX3NlbGZ0ZXN0LmMgXAorKyAgICBmaXBzX3JzYV9z ZWxmdGVzdC5jIGZpcHNfc2hhMV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5j ICBmaXBzX3JhbmQuYyBcCisrICAgIGZpcHNfcnNhX3g5MzFnLmMKKysKKytMSUJPQko9Zmlwc19h ZXNfc2VsZnRlc3QubyBmaXBzX2Rlc19zZWxmdGVzdC5vIGZpcHNfaG1hY19zZWxmdGVzdC5vIGZp cHNfcmFuZF9zZWxmdGVzdC5vIFwKKysgICAgZmlwc19yc2Ffc2VsZnRlc3QubyBmaXBzX3NoYTFf c2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19yYW5kLm8gXAorKyAg ICBmaXBzX3JzYV94OTMxZy5vCisrCisrU1JDPSAkKExJQlNSQykgZmlwc19zdGFuZGFsb25lX3No YTEuYworKworK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKKytIRUFERVI9CSQoRVhIRUFE RVIpCisrCisrQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKKysKKyt0b3A6Cisr CShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkKKysK KythbGw6CWxpYgorKworK2xpYjoJJChMSUJPQkopCisrCSQoQVIpICQoTElCKSAkKExJQk9CSikK KysJJChSQU5MSUIpICQoTElCKSB8fCBlY2hvIE5ldmVyIG1pbmQuCisrCUB0b3VjaCBsaWIKKysK KytmaWxlczoKKysJJChQRVJMKSAkKFRPUCkvdXRpbC9maWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRP UCkvTUlORk8KKysKKytsaW5rczoKKysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQorKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9t a2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCisrCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGlu ay5wbCAuLi8uLi9hcHBzICQoQVBQUykKKysKKytpbnN0YWxsOgorKwlAWyAtbiAiJChJTlNUQUxM VE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1ha2VmaWxlLi4uCisrCUBoZWFkZXJsaXN0 PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVybGlzdCA7IFwKKysJZG8gIFwKKysJKGNw ICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsg XAorKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3Bl bnNzbC8kJGkgKTsgXAorKwlkb25lOworKworK3RhZ3M6CisrCWN0YWdzICQoU1JDKQorKworK3Rl c3RzOgorKworK2xpbnQ6CisrCWxpbnQgLURMSU5UICQoSU5DTFVERVMpICQoU1JDKT5mbHVmZgor KworK2RlcGVuZDoKKysJQFsgLW4gIiQoTUFLRURFUEVORCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5 IHVwcGVyIE1ha2VmaWxlLi4uCisrCSQoTUFLRURFUEVORCkgLS0gJChDRkxBRykgJChJTkNMVURF UykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNSQykKKysKKytkY2xlYW46CisrCSQoUEVS TCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FLykge3ByaW50OyBleGl0KDAp O30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKKysJbXYgLWYgTWFrZWZpbGUubmV3ICQoTUFL RUZJTEUpCisrCisrY2xlYW46CisrCXJtIC1mICoubyAqLm9iaiBsaWIgdGFncyBjb3JlIC5wdXJl IC5uZnMqICoub2xkICouYmFrIGZsdWZmCisrCisrIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAt LSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9j cnlwdG8vaG1hYy9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9obWFjL2htYWMuYwor LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJMjAxMC0wMS0yNiAxNToz Mzo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9obWFjL2htYWMu YwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTc3LDYgKzc3LDEzIEBA IGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KKyAKKyAJaWYgKGtleSAh PSBOVUxMKQorIAkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSAm JiAhKG1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCisrCQkmJiAoIShjdHgtPm1kX2N0eC5m bGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKKysJCSB8fCAhKGN0eC0+aV9j dHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrCQkgfHwgIShjdHgt Pm9fY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKSkpCisrCQkJZ290 byBlcnI7CisrI2VuZGlmCisgCQlyZXNldD0xOworIAkJaj1FVlBfTURfYmxvY2tfc2l6ZShtZCk7 CisgCQlPUEVOU1NMX2Fzc2VydChqIDw9IChpbnQpc2l6ZW9mKGN0eC0+a2V5KSk7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRv L01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vTWFrZWZpbGUuZmlwcwkyMDA5LTA0 LTA2IDE2OjMxOjM1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL01h a2VmaWxlCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMzQsMTQgKzM0 LDE0IEBAIEdFTkVSQUw9TWFrZWZpbGUgUkVBRE1FIGNyeXB0by1saWIuY29tIGkKKyAKKyBMSUI9 ICQoVE9QKS9saWJjcnlwdG8uYQorIFNIQVJFRF9MSUI9IGxpYmNyeXB0byQoU0hMSUJfRVhUKQor LUxJQlNSQz0JY3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMgbWVtX2RiZy5jIGN2ZXJzaW9uLmMg ZXhfZGF0YS5jIGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBvX3RpbWUuYyBvX3N0ci5jIG9fZGly LmMKKy1MSUJPQko9IGNyeXB0bGliLm8gbWVtLm8gbWVtX2RiZy5vIGN2ZXJzaW9uLm8gZXhfZGF0 YS5vIGNwdF9lcnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBvX3N0ci5vIG9fZGlyLm8gJChD UFVJRF9PQkopCisrTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1lbV9jbHIuYyBtZW1fZGJnLmMg Y3ZlcnNpb24uYyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5jIHVpZC5jIG9fdGltZS5jIG9f c3RyLmMgb19kaXIuYyBvX2luaXQuYyBmaXBzX2Vyci5jCisrTElCT0JKPSBjcnlwdGxpYi5vIG1l bS5vIG1lbV9kYmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRfZXJyLm8gZWJjZGljLm8gdWlk Lm8gb190aW1lLm8gb19zdHIubyBvX2Rpci5vIG9faW5pdC5vIGZpcHNfZXJyLm8gJChDUFVJRF9P QkopCisgCisgU1JDPSAkKExJQlNSQykKKyAKKyBFWEhFQURFUj0gY3J5cHRvLmggb3BlbnNzbHYu aCBvcGVuc3NsY29uZi5oIGViY2RpYy5oIHN5bWhhY2tzLmggXAorIAlvc3NsX3R5cC5oCistSEVB REVSPQljcnlwdGxpYi5oIGJ1aWxkaW5mLmggbWQzMl9jb21tb24uaCBvX3RpbWUuaCBvX3N0ci5o IG9fZGlyLmggJChFWEhFQURFUikKKytIRUFERVI9CWNyeXB0bGliLmggYnVpbGRpbmYuaCBmaXBz X2xvY2wuaCBtZDMyX2NvbW1vbi5oIG9fdGltZS5oIG9fc3RyLmggb19kaXIuaCAkKEVYSEVBREVS KQorIAorIEFMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCisgCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9tZGMyL21kYzJkZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZGMyL21kYzJk Z3N0LmMuZmlwcwkyMDA0LTA3LTI1IDIxOjEwOjQxLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjAvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAorQEAgLTYxLDYgKzYxLDExIEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNp bmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL21kYzIuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorICN1bmRlZiBjMmwKKyAjZGVmaW5lIGMybChj LGwpCShsID0oKERFU19MT05HKSgqKChjKSsrKSkpICAgICwgXAorQEAgLTc1LDcgKzgwLDcgQEAK KyAJCQkqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKKyAKKyBzdGF0 aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBz aXplX3QgbGVuKTsKKy1pbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJUFNf TURfSW5pdChNREMyKQorIAl7CisgCWMtPm51bT0wOworIAljLT5wYWRfdHlwZT0xOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWRjMi9tZGMyLmguZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9tZGMyL21kYzIuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kYzIvbWRjMi5oLmZp cHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9tZGMyL21kYzIuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAor QEAgLTgwLDcgKzgwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgbWRjMl9jdHhfc3QKKyAJaW50IHBhZF90 eXBlOyAvKiBlaXRoZXIgMSBvciAyLCBkZWZhdWx0IDEgKi8KKyAJfSBNREMyX0NUWDsKKyAKKy0K KysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfTURDMl9Jbml0KE1EQzJfQ1RYICpj KTsKKysjZW5kaWYKKyBpbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKKyBpbnQgTURDMl9VcGRh dGUoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOwor IGludCBNREMyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL21kMi9tZDJfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQyL21kMl9k Z3N0LmMuZmlwcwkyMDA3LTA4LTMxIDEyOjEyOjM1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjAvY3J5cHRvL21kMi9tZDJfZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAw MDAwICswMjAwCitAQCAtNjIsNiArNjIsMTEgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9tZDIuaD4K KyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0 by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgCisgY29uc3QgY2hhciBNRDJf dmVyc2lvbltdPSJNRDIiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC0xMTYsNyArMTIx LDcgQEAgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCkKKyAJCXJldHVybigibWQyKGludCki KTsKKyAJfQorIAorLWludCBNRDJfSW5pdChNRDJfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJUFNfTURf SW5pdChNRDIpCisgCXsKKyAJYy0+bnVtPTA7CisgCW1lbXNldChjLT5zdGF0ZSwwLHNpemVvZiBj LT5zdGF0ZSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDIvbWQyLmguZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9tZDIvbWQyLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9t ZDIvbWQyLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL21kMi9tZDIuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAw MCArMDIwMAorQEAgLTgxLDYgKzgxLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgTUQyc3RhdGVfc3QKKyAJ fSBNRDJfQ1RYOworIAorIGNvbnN0IGNoYXIgKk1EMl9vcHRpb25zKHZvaWQpOworKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9NRDJfSW5pdChNRDJfQ1RYICpjKTsKKysjZW5kaWYK KyBpbnQgTUQyX0luaXQoTUQyX0NUWCAqYyk7CisgaW50IE1EMl9VcGRhdGUoTUQyX0NUWCAqYywg Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IE1EMl9GaW5hbCh1 bnNpZ25lZCBjaGFyICptZCwgTUQyX0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Ny eXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNC9tZDRfZGdz dC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcwkyMDA3LTAx LTIxIDE0OjA3OjExLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21k NC9tZDRfZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtNTks NiArNTksMTEgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAibWQ0X2xvY2wuaCIK KyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisrCisgCisgY29uc3QgY2hhciBNRDRfdmVyc2lvbltdPSJNRDQiIE9QRU5TU0xfVkVSU0lP Tl9QVEVYVDsKKyAKK0BAIC03MCw3ICs3NSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0i TUQ0IiBPUEVOU1NMX1YKKyAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThi YWRjZmVMCisgI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAor IAorLWludCBNRDRfSW5pdChNRDRfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDQp CisgCXsKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9SU5JVF9EQVRBX0E7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDQvbWQ0LmguZmlwcyBvcGVuc3NsLTEuMC4w L2NyeXB0by9tZDQvbWQ0LmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDQvbWQ0LmguZmlw cwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL21kNC9tZDQuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAg LTEwNSw2ICsxMDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDRzdGF0ZV9zdAorIAl1bnNpZ25lZCBp bnQgbnVtOworIAl9IE1ENF9DVFg7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2 YXRlX01ENF9Jbml0KE1ENF9DVFggKmMpOworKyNlbmRpZgorIGludCBNRDRfSW5pdChNRDRfQ1RY ICpjKTsKKyBpbnQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgbGVuKTsKKyBpbnQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBNRDRfQ1RYICpjKTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMC9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAxMC0wMy0zMCAxMDozNDo0 MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OSw2ICs1OSwxMSBAQAorICNpbmNsdWRlIDxzdGRpby5o PgorICNpbmNsdWRlICJtZDVfbG9jbC5oIgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIE1ENV92ZXJz aW9uW109Ik1ENSIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorQEAgLTcwLDcgKzc1LDcgQEAg Y29uc3QgY2hhciBNRDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgorICNkZWZpbmUgSU5JVF9E QVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKKyAjZGVmaW5lIElOSVRfREFUQV9EICh1 bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZMCisgCistaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpCisr RklQU19OT05fRklQU19NRF9Jbml0KE1ENSkKKyAJeworIAltZW1zZXQgKGMsMCxzaXplb2YoKmMp KTsKKyAJYy0+QT1JTklUX0RBVEFfQTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21k NS9tZDUuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNS9tZDUuaAorLS0tIG9wZW5zc2wt MS4wLjAvY3J5cHRvL21kNS9tZDUuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ1L21kNS5oCTIwMTAtMDMtMzAgMTA6 MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTA1LDYgKzEwNSw5IEBAIHR5cGVkZWYgc3RydWN0 IE1ENXN0YXRlX3N0CisgCXVuc2lnbmVkIGludCBudW07CisgCX0gTUQ1X0NUWDsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1X0NUWCAqYyk7CisrI2Vu ZGlmCisgaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpOworIGludCBNRDVfVXBkYXRlKE1ENV9DVFgg KmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBNRDVfRmluYWwodW5zaWdu ZWQgY2hhciAqbWQsIE1ENV9DVFggKmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8v bWVtLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZW0uYworLS0tIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL21lbS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1Nzo0Ny4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZW0uYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAw MCArMDIwMAorQEAgLTEwMSw3ICsxMDEsNyBAQCBzdGF0aWMgdm9pZCAoKmZyZWVfbG9ja2VkX2Z1 bmMpKHZvaWQgKikgCisgCisgLyogbWF5IGJlIGNoYW5nZWQgYXMgbG9uZyBhcyAnYWxsb3dfY3Vz dG9taXplX2RlYnVnJyBpcyBzZXQgKi8KKyAvKiBYWFggdXNlIGNvcnJlY3QgZnVuY3Rpb24gcG9p bnRlciB0eXBlcyAqLworLSNpZmRlZiBDUllQVE9fTURFQlVHCisrI2lmIGRlZmluZWQoQ1JZUFRP X01ERUJVRykgJiYgIWRlZmluZWQoT1BFTlNTTF9GSVBTKQorIC8qIHVzZSBkZWZhdWx0IGZ1bmN0 aW9ucyBmcm9tIG1lbV9kYmcuYyAqLworIHN0YXRpYyB2b2lkICgqbWFsbG9jX2RlYnVnX2Z1bmMp KHZvaWQgKixpbnQsY29uc3QgY2hhciAqLGludCxpbnQpCisgCT0gQ1JZUFRPX2RiZ19tYWxsb2M7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5zc2wtMS4w LjAvY3J5cHRvL29faW5pdC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vb19pbml0LmMuZmlw cwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL29faW5pdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAt MCwwICsxLDgwIEBACisrLyogb19pbml0LmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4g TiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0 LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBw cm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlv dW5nCisrICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAq CisrICovCisrCisrI2luY2x1ZGUgPGVfb3MuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysKKysvKiBQZXJmb3JtIGFueSBlc3NlbnRpYWwgT3BlblNTTCBpbml0aWFsaXphdGlvbiBvcGVy YXRpb25zLgorKyAqIEN1cnJlbnRseSBvbmx5IHNldHMgRklQUyBjYWxsYmFja3MKKysgKi8KKysK Kyt2b2lkIE9QRU5TU0xfaW5pdF9saWJyYXJ5KHZvaWQpCisrCXsKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCXN0YXRpYyBpbnQgZG9uZSA9IDA7CisrCWlmICghZG9uZSkKKysJCXsKKysjaWZkZWYg Q1JZUFRPX01ERUJVRworKwkJQ1JZUFRPX21hbGxvY19kZWJ1Z19pbml0KCk7CisrI2VuZGlmCisr CQlkb25lID0gMTsKKysJCX0KKysjZW5kaWYKKysJfQorKwkJCisrCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8v b3BlbnNzbGNvbmYuaC5pbgorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL29wZW5zc2xjb25mLmgu aW4uZmlwcwkyMDA1LTEyLTE2IDExOjM3OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL29wZW5zc2xjb25mLmguaW4JMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAw MDAgKzAyMDAKK0BAIC0xLDUgKzEsMjAgQEAKKyAvKiBjcnlwdG8vb3BlbnNzbGNvbmYuaC5pbiAq LworIAorKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQKKysKKysvKiBJbmNsdWRlIGFu eSBzeW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0bHkgc2V0IHRvIGVuYWJsZSBh IGZlYXR1cmUKKysgKiB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIHRvIG1ha2VkZXBlbmQuCisrICoK KysgKiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxseSBsb29rIGF0IHRoaXMsIHdl IHVzZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKKysgKiBpbnN0ZWFkOyB3ZSB3YW50IHRvIG1ha2Ug aXQgZWFzeSB0byByZW1vdmUgc3ViZGlyZWN0b3JpZXMgd2l0aCBkaXNhYmxlZCBhbGdvcml0aG1z Ll0KKysgKi8KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyNkZWZpbmUgT1BFTlNTTF9GSVBT CisrI2VuZGlmCisrCisrI2VuZGlmCisrCisgLyogR2VuZXJhdGUgODAzODYgY29kZT8gKi8KKyAj dW5kZWYgSTM4Nl9PTkxZCisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9wa2NzMTIv cDEyX2NydC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYworLS0t IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMuZmlwcwkyMDA5LTAzLTA5IDE0 OjA4OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3BrY3MxMi9w MTJfY3J0LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OSw2ICs1 OSwxMCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNp bmNsdWRlIDxvcGVuc3NsL3BrY3MxMi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgCisgc3RhdGljIGludCBwa2NzMTJf YWRkX2JhZyhTVEFDS19PRihQS0NTMTJfU0FGRUJBRykgKipwYmFncywgUEtDUzEyX1NBRkVCQUcg KmJhZyk7CitAQCAtOTAsNyArOTQsMTQgQEAgUEtDUzEyICpQS0NTMTJfY3JlYXRlKGNoYXIgKnBh c3MsIGNoYXIgKgorIAorIAkvKiBTZXQgZGVmYXVsdHMgKi8KKyAJaWYgKCFuaWRfY2VydCkKKysJ CXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQlpZiAoRklQU19tb2RlKCkpCisrCQkJbmlkX2Nl cnQgPSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVTX0NCQzsKKysJCWVsc2UKKysj ZW5kaWYKKyAJCW5pZF9jZXJ0ID0gTklEX3BiZV9XaXRoU0hBMUFuZDQwQml0UkMyX0NCQzsKKysJ CX0KKyAJaWYgKCFuaWRfa2V5KQorIAkJbmlkX2tleSA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tl eV9UcmlwbGVERVNfQ0JDOworIAlpZiAoIWl0ZXIpCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Ny eXB0by9yYW5kL21kX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvbWRfcmFu ZC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcwkyMDA5LTAx LTAzIDEwOjI1OjMyLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3Jh bmQvbWRfcmFuZC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTI2 LDYgKzEyNiwxMCBAQAorIAorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgI2lmZGVmIEJOX0RFQlVHCisgIyBkZWZpbmUgUFJF RElDVAorQEAgLTM0Miw2ICszNDYsMTQgQEAgc3RhdGljIGludCBzc2xlYXlfcmFuZF9ieXRlcyh1 bnNpZ25lZCBjaAorICNlbmRpZgorIAlpbnQgZG9fc3Rpcl9wb29sID0gMDsKKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmKEZJUFNfbW9kZSgpKQorKwkgICAgeworKwkgICAgRklQU2VycihG SVBTX0ZfU1NMRUFZX1JBTkRfQllURVMsRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCSAgICBy ZXR1cm4gMDsKKysJICAgIH0KKysjZW5kaWYKKysKKyAjaWZkZWYgUFJFRElDVAorIAlpZiAocmFu ZF9wcmVkaWN0YWJsZSkKKyAJCXsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQv cmFuZF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYworLS0t IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYy5maXBzCTIwMDYtMTEtMjEgMjI6 Mjk6NDEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5k X2Vyci5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtNzAsNiArNzAs MTMgQEAKKyAKKyBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFJBTkRfc3RyX2Z1bmN0c1tdPQorIAl7 Cisre0VSUl9GVU5DKFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QpLAkiRU5HX1JBTkRf R0VUX1JBTkRfTUVUSE9EIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkQpLAkiRklQU19S QU5EIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfQllURVMpLAkiRklQU19SQU5EX0JZ VEVTIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUKSwJIkZJUFNfUkFORF9T RVRfRFQifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX0RUKSwJIkZJUFNfU0VUX0RUIn0s Cisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQpLAkiRklQU19TRVRfUFJOR19T RUVEIn0sCisre0VSUl9GVU5DKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUpLAkiRklQU19TRVRf VEVTVF9NT0RFIn0sCisge0VSUl9GVU5DKFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCksCSJS QU5EX2dldF9yYW5kX21ldGhvZCJ9LAorIHtFUlJfRlVOQyhSQU5EX0ZfU1NMRUFZX1JBTkRfQllU RVMpLAkiU1NMRUFZX1JBTkRfQllURVMifSwKKyB7MCxOVUxMfQorQEAgLTc3LDcgKzg0LDE3IEBA IHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfZnVuY3RzW10KKyAKKyBzdGF0aWMgRVJS X1NUUklOR19EQVRBIFJBTkRfc3RyX3JlYXNvbnNbXT0KKyAJeworK3tFUlJfUkVBU09OKFJBTkRf Ul9OT05fRklQU19NRVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRob2QifSwKKyt7RVJSX1JFQVNP TihSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSkgICAgICwibm90IGluIHRlc3QgbW9kZSJ9LAorK3tF UlJfUkVBU09OKFJBTkRfUl9OT19LRVlfU0VUKSAgICAgICAgICAgLCJubyBrZXkgc2V0In0sCisr e0VSUl9SRUFTT04oUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSCksInBybmcgYXNraW5n IGZvciB0b28gbXVjaCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0VSUk9SKSAgICAgICAg ICAgLCJwcm5nIGVycm9yIn0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfS0VZRUQpICAgICAg ICAgICAsInBybmcga2V5ZWQifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfUkVLRVlF RCkgICAgICwicHJuZyBub3QgcmVrZXllZCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05P VF9SRVNFRURFRCkgICAgLCJwcm5nIG5vdCByZXNlZWRlZCJ9LAorIHtFUlJfUkVBU09OKFJBTkRf Ul9QUk5HX05PVF9TRUVERUQpICAgICAgLCJQUk5HIG5vdCBzZWVkZWQifSwKKyt7RVJSX1JFQVNP TihSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSksInBybmcgc2VlZCBtdXN0IG5v dCBtYXRjaCBrZXkifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19TVFVDSykgICAgICAgICAg ICwicHJuZyBzdHVjayJ9LAorIHswLE5VTEx9CisgCX07CisgCitkaWZmIC11cCBvcGVuc3NsLTEu MC4wL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQvcmFu ZC5oCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kLmguZmlwcwkyMDEwLTAzLTMw IDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JhbmQv cmFuZC5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTI4LDExICsx MjgsMjggQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9pZCk7CisgLyogRXJyb3IgY29k ZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KKyAKKyAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8K KysjZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTA4CisrI2RlZmlu ZSBSQU5EX0ZfRklQU19SQU5ECQkJCSAxMDMKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfQllU RVMJCQkJIDEwMgorKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQJCQkJIDEwNgorKyNk ZWZpbmUgUkFORF9GX0ZJUFNfU0VUX0RUCQkJCSAxMDQKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NF VF9QUk5HX1NFRUQJCQkgMTA3CisrI2RlZmluZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFCQkJ IDEwNQorICNkZWZpbmUgUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwMQorICNkZWZp bmUgUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTCQkJIDEwMAorIAorIC8qIFJlYXNvbiBjb2Rlcy4g Ki8KKysjZGVmaW5lIFJBTkRfUl9OT05fRklQU19NRVRIT0QJCQkJIDEwNQorKyNkZWZpbmUgUkFO RF9SX05PVF9JTl9URVNUX01PREUJCQkJIDEwNgorKyNkZWZpbmUgUkFORF9SX05PX0tFWV9TRVQJ CQkJIDEwNworKyNkZWZpbmUgUkFORF9SX1BSTkdfQVNLSU5HX0ZPUl9UT09fTVVDSAkJCSAxMDEK KysjZGVmaW5lIFJBTkRfUl9QUk5HX0VSUk9SCQkJCSAxMDgKKysjZGVmaW5lIFJBTkRfUl9QUk5H X0tFWUVECQkJCSAxMDkKKysjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRUtFWUVECQkJCSAxMDIK KysjZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9SRVNFRURFRAkJCSAxMDMKKyAjZGVmaW5lIFJBTkRf Ul9QUk5HX05PVF9TRUVERUQJCQkJIDEwMAorKyNkZWZpbmUgUkFORF9SX1BSTkdfU0VFRF9NVVNU X05PVF9NQVRDSF9LRVkJCSAxMTAKKysjZGVmaW5lIFJBTkRfUl9QUk5HX1NUVUNLCQkJCSAxMDQK KyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlw dG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kX2xp Yi5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jLmZpcHMJMjAwOC0x MS0xMiAwNDo1ODowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9y YW5kL3JhbmRfbGliLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC02 MCw2ICs2MCwxMiBAQAorICNpbmNsdWRlIDx0aW1lLmg+CisgI2luY2x1ZGUgImNyeXB0bGliLmgi CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlICJyYW5kX2xjbC5oIgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2VuZGlmCisrCisgI2lmbmRlZiBPUEVOU1NMX05PX0VO R0lORQorICNpbmNsdWRlIDxvcGVuc3NsL2VuZ2luZS5oPgorICNlbmRpZgorQEAgLTEwMiw4ICsx MDgsMTkgQEAgY29uc3QgUkFORF9NRVRIT0QgKlJBTkRfZ2V0X3JhbmRfbWV0aG9kKAorIAkJCWZ1 bmN0X3JlZiA9IGU7CisgCQllbHNlCisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJ CWRlZmF1bHRfUkFORF9tZXRoID0gRklQU19tb2RlKCkgPyBGSVBTX3JhbmRfbWV0aG9kKCkgOiBS QU5EX1NTTGVheSgpOworKwkJfQorKwlpZiAoRklQU19tb2RlKCkKKysJCSYmIGRlZmF1bHRfUkFO RF9tZXRoICE9IEZJUFNfcmFuZF9jaGVjaygpKQorKwkgICAgeworKwkgICAgUkFORGVycihSQU5E X0ZfUkFORF9HRVRfUkFORF9NRVRIT0QsUkFORF9SX05PTl9GSVBTX01FVEhPRCk7CisrCSAgICBy ZXR1cm4gMDsKKysJICAgIH0KKysjZWxzZQorIAkJCWRlZmF1bHRfUkFORF9tZXRoID0gUkFORF9T U0xlYXkoKTsKKyAJCX0KKysjZW5kaWYKKyAJcmV0dXJuIGRlZmF1bHRfUkFORF9tZXRoOworIAl9 CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzIvcmMyLmguZmlwcyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9yYzIvcmMyLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzIvcmMy LmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3JjMi9yYzIuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIw MAorQEAgLTc5LDcgKzc5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgcmMyX2tleV9zdAorIAlSQzJfSU5U IGRhdGFbNjRdOworIAl9IFJDMl9LRVk7CisgCistIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMgCisr dm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSxpbnQgYml0cyk7CisrI2VuZGlmCisgdm9pZCBSQzJfc2V0X2tleShS QzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsaW50IGJpdHMp OworIHZvaWQgUkMyX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVk IGNoYXIgKm91dCxSQzJfS0VZICprZXksCisgCQkgICAgIGludCBlbmMpOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcmMyL3JjMl9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9yYzIvcmMyX3NrZXkuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjMi9yYzJfc2tleS5j LmZpcHMJMjAwNy0wOS0xOCAyMzoxMDozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4wL2NyeXB0by9yYzIvcmMyX3NrZXkuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCAr MDIwMAorQEAgLTU3LDYgKzU3LDExIEBACisgICovCisgCisgI2luY2x1ZGUgPG9wZW5zc2wvcmMy Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAicmMyX2xv Y2wuaCIKKyAKKyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfdGFibGVbMjU2XT17CitA QCAtOTQsOCArOTksMjAgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5X3RhYmxlWzI1 NgorICAqIEJTQUZFIHVzZXMgdGhlICdyZXRhcmRlZCcgdmVyc2lvbi4gIFdoYXQgSSBwcmV2aW91 c2x5IHNoaXBwZWQgaXMKKyAgKiB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nIDEwMjQgZm9yIHRoZSAn Yml0cycgcGFyYW1ldGVyLiAgQnNhZmUgdXNlcworICAqIGEgdmVyc2lvbiB3aGVyZSB0aGUgYml0 cyBwYXJhbWV0ZXIgaXMgdGhlIHNhbWUgYXMgbGVuKjggKi8KKysKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisgdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmRhdGEsIGludCBiaXRzKQorIAl7CisrCWlmIChGSVBTX21vZGUoKSkKKysJCUZJ UFNfQkFEX0FCT1JUKFJDMikKKysJcHJpdmF0ZV9SQzJfc2V0X2tleShrZXksIGxlbiwgZGF0YSwg Yml0cyk7CisrCX0KKyt2b2lkIHByaXZhdGVfUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQg bGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorKwkJCQkJCQkJaW50IGJpdHMpCisrI2Vs c2UKKyt2b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWdu ZWQgY2hhciAqZGF0YSwgaW50IGJpdHMpCisrI2VuZGlmCisrCXsKKyAJaW50IGksajsKKyAJdW5z aWduZWQgY2hhciAqazsKKyAJUkMyX0lOVCAqa2k7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Ny eXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9h c20vcmM0LXMzOTB4LnBsCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9yYzQtczM5 MHgucGwuZmlwcwkyMDA5LTAyLTEyIDE1OjQ4OjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsCTIwMTAtMDMtMzAgMTA6MzQ6NDEu MDAwMDAwMDAwICswMjAwCitAQCAtMjAyLDQgKzIwMiw2IEBAIFJDNF9vcHRpb25zOgorIC5zdHJp bmcJInJjNCg4eCxjaGFyKSIKKyBfX18KKyAKKyskY29kZSA9fiBzL1JDNF9zZXRfa2V5L3ByaXZh dGVfUkM0X3NldF9rZXkvZyBpZiAoJEVOVntGSVBTfSBuZSAiIik7CisrCisgcHJpbnQgJGNvZGU7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwuZmlw cyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwKKy0tLSBvcGVuc3Ns LTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC14ODZfNjQucGwuZmlwcwkyMDA5LTA0LTI3IDIxOjMx OjA0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0 LXg4Nl82NC5wbAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ5OSw2 ICs0OTksOCBAQCBfX18KKyAKKyAkY29kZSA9fiBzLyMoW2J3ZF0pLyQxL2dtOworIAorKyRjb2Rl ID1+IHMvUkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5l ICIiKTsKKysKKyBwcmludCAkY29kZTsKKyAKKyBjbG9zZSBTVERPVVQ7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC01ODYucGwuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9yYzQvYXNtL3JjNC01ODYucGwKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNt L3JjNC01ODYucGwuZmlwcwkyMDA3LTEyLTAyIDIyOjMyOjAzLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbAkyMDEwLTAzLTMwIDEwOjM0 OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE2Niw4ICsxNjYsMTIgQEAgJGlkeD0iZWR4IjsKKyAK KyAmZXh0ZXJuYWxfbGFiZWwoIk9QRU5TU0xfaWEzMmNhcF9QIik7CisgCisrJHNldGtleWZ1bmMg PSAiUkM0X3NldF9rZXkiOworKyRzZXRrZXlmdW5jID0gInByaXZhdGVfUkM0X3NldF9rZXkiIGlm ICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKysKKyAjIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAq a2V5LGludCBsZW4sY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CistJmZ1bmN0aW9uX2JlZ2lu KCJSQzRfc2V0X2tleSIpOworKyZmdW5jdGlvbl9iZWdpbigkc2V0a2V5ZnVuYyk7CisgCSZtb3YJ KCRvdXQsJndwYXJhbSgwKSk7CQkjIGxvYWQga2V5CisgCSZtb3YJKCRpZGksJndwYXJhbSgxKSk7 CQkjIGxvYWQgbGVuCisgCSZtb3YJKCRpbnAsJndwYXJhbSgyKSk7CQkjIGxvYWQgZGF0YQorQEAg LTI0NSw3ICsyNDksNyBAQCAkaWR4PSJlZHgiOworIAkmeG9yCSgiZWF4IiwiZWF4Iik7CisgCSZt b3YJKCZEV1AoLTgsJG91dCksImVheCIpOwkJIyBrZXktPng9MDsKKyAJJm1vdgkoJkRXUCgtNCwk b3V0KSwiZWF4Iik7CQkjIGtleS0+eT0wOworLSZmdW5jdGlvbl9lbmQoIlJDNF9zZXRfa2V5Iik7 CisrJmZ1bmN0aW9uX2VuZCgkc2V0a2V5ZnVuYyk7CisgCisgIyBjb25zdCBjaGFyICpSQzRfb3B0 aW9ucyh2b2lkKTsKKyAmZnVuY3Rpb25fYmVnaW5fQigiUkM0X29wdGlvbnMiKTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL3JjNC9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9NYWtlZmlsZS5m aXBzCTIwMDktMDItMTEgMTE6MDE6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vcmM0L01ha2VmaWxlCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAw CitAQCAtMjEsOCArMjEsOCBAQCBURVNUPXJjNHRlc3QuYworIEFQUFM9CisgCisgTElCPSQoVE9Q KS9saWJjcnlwdG8uYQorLUxJQlNSQz1yYzRfc2tleS5jIHJjNF9lbmMuYworLUxJQk9CSj0kKFJD NF9FTkMpCisrTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jIHJjNF9mYmxrLmMKKytMSUJPQko9 JChSQzRfRU5DKSByYzRfZmJsay5vCisgCisgU1JDPSAkKExJQlNSQykKKyAKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzRfZmJsay5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vcmM0L3JjNF9mYmxrLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0X2ZibGsu Yy5maXBzCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMC9jcnlwdG8vcmM0L3JjNF9mYmxrLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAg KzAyMDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBjcnlwdG8vcmM0L3JjNF9mYmxrLmMgKi8KKysv KiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3Ig dGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcu CisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorKyAqLworKworKworKyNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgorKyNpbmNsdWRlICJy YzRfbG9jbC5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKysKKysvKiBGSVBTIG1vZGUgYmxvY2tpbmcgZm9yIFJDNCBoYXMg dG8gYmUgZG9uZSBzZXBhcmF0ZWx5IHNpbmNlIFJDNF9zZXRfa2V5CisrICogbWF5IGJlIGltcGxl bWVudGVkIGluIGFuIGFzc2VtYmx5IGxhbmd1YWdlIGZpbGUuCisrICovCisrCisrI2lmZGVmIE9Q RU5TU0xfRklQUworK3ZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25z dCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKwl7CisrCWlmIChGSVBTX21vZGUoKSkKKysJCUZJUFNf QkFEX0FCT1JUKFJDNCkKKysJcHJpdmF0ZV9SQzRfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7Cisr CX0KKysjZW5kaWYKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzQuaC5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzQuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL3JjNC9yYzQuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L3JjNC5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAw MDAwMDAwICswMjAwCitAQCAtNzgsNiArNzgsOSBAQCB0eXBlZGVmIHN0cnVjdCByYzRfa2V5X3N0 CisgCisgIAorIGNvbnN0IGNoYXIgKlJDNF9vcHRpb25zKHZvaWQpOworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKyt2b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBj b25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKysjZW5kaWYKKyB2b2lkIFJDNF9zZXRfa2V5KFJD NF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Cisgdm9pZCBS QzQoUkM0X0tFWSAqa2V5LCBzaXplX3QgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbmRhdGEs CisgCQl1bnNpZ25lZCBjaGFyICpvdXRkYXRhKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL3JjNC9yYzRfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L3JjNF9za2V5 LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0X3NrZXkuYy5maXBzCTIwMDctMDEt MjEgMTQ6MDc6MTMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0 L3JjNF9za2V5LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OSw2 ICs1OSwxMSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL3JjNC5oPgorICNpbmNsdWRlICJyYzRfbG9j bC5oIgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv Y3J5cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIFJDNF92ZXJzaW9uW109IlJDNCIgT1BFTlNT TF9WRVJTSU9OX1BURVhUOworIAorQEAgLTg1LDcgKzkwLDExIEBAIGNvbnN0IGNoYXIgKlJDNF9v cHRpb25zKHZvaWQpCisgICogRGF0ZTogV2VkLCAxNCBTZXAgMTk5NCAwNjozNTozMSBHTVQKKyAg Ki8KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdm9pZCBwcml2YXRlX1JDNF9zZXRfa2V5KFJD NF9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKysjZWxzZQor IHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhKQorKyNlbmRpZgorIAl7CisgICAgICAgICByZWdpc3RlciBSQzRfSU5UIHRtcDsK KyAgICAgICAgIHJlZ2lzdGVyIGludCBpZDEsaWQyOworQEAgLTEyNiw3ICsxMzUsMTIgQEAgdm9p ZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIAorIAkJICogbW9kdWxlLi4uCisg CQkgKgkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgCQkgKi8KKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrCQl1bnNpZ25lZCBsb25nICppYTMyY2FwX3B0ciA9IE9QRU5TU0xfaWEzMmNhcF9sb2Mo KTsKKysJCWlmIChpYTMyY2FwX3B0ciAmJiAoKmlhMzJjYXBfcHRyICYgKDE8PDI4KSkpIHsKKysj ZWxzZQorIAkJaWYgKE9QRU5TU0xfaWEzMmNhcF9QICYgKDE8PDI4KSkgeworKyNlbmRpZgorIAkJ CXVuc2lnbmVkIGNoYXIgKmNwPSh1bnNpZ25lZCBjaGFyICopZDsKKyAKKyAJCQlmb3IgKGk9MDtp PDI1NjtpKyspIGNwW2ldPWk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yaXBlbWQv cmlwZW1kLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yaXBlbWQvcmlwZW1kLmgKKy0tLSBv cGVuc3NsLTEuMC4wL2NyeXB0by9yaXBlbWQvcmlwZW1kLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMz OjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JpcGVtZC9yaXBl bWQuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTkxLDYgKzkxLDkg QEAgdHlwZWRlZiBzdHJ1Y3QgUklQRU1EMTYwc3RhdGVfc3QKKyAJdW5zaWduZWQgaW50ICAgbnVt OworIAl9IFJJUEVNRDE2MF9DVFg7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2 YXRlX1JJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpOworKyNlbmRpZgorIGludCBSSVBF TUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpjKTsKKyBpbnQgUklQRU1EMTYwX1VwZGF0ZShSSVBF TUQxNjBfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgUklQRU1E MTYwX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBSSVBFTUQxNjBfQ1RYICpjKTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MC9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yaXBl bWQvcm1kX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTMuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMJMjAxMC0wMy0zMCAxMDoz NDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01OSw2ICs1OSwxMSBAQAorICNpbmNsdWRlIDxzdGRp by5oPgorICNpbmNsdWRlICJybWRfbG9jbC5oIgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2 Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIFJNRDE2 MF92ZXJzaW9uW109IlJJUEUtTUQxNjAiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC02 OSw3ICs3NCw3IEBAIGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIKKyAg ICAgIHZvaWQgcmlwZW1kMTYwX2Jsb2NrKFJJUEVNRDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcg KnAsc2l6ZV90IG51bSk7CisgIyAgZW5kaWYKKyAKKy1pbnQgUklQRU1EMTYwX0luaXQoUklQRU1E MTYwX0NUWCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoUklQRU1EMTYwKQorIAl7CisgCW1l bXNldCAoYywwLHNpemVvZigqYykpOworIAljLT5BPVJJUEVNRDE2MF9BOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRv L3JzYS9yc2FfZWF5LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2VheS5jLmZp cHMJMjAwOC0wOS0xNCAxNTo1MTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAw CitAQCAtMTE0LDYgKzExNCwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1 ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+CisrI2VuZGlmCisgCisgI2lmbmRlZiBSU0FfTlVMTAorIAorQEAgLTEzOCw3ICsx NDIsNyBAQCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9eworIAlCTl9tb2Rf ZXhwX21vbnQsIC8qIFhYWCBwcm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBNb250Z29tZXJ5IGlm ICBlID09IDMgKi8KKyAJUlNBX2VheV9pbml0LAorIAlSU0FfZWF5X2ZpbmlzaCwKKy0JMCwgLyog ZmxhZ3MgKi8KKysJUlNBX0ZMQUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICovCisgCU5VTEwsCisg CTAsIC8qIHJzYV9zaWduICovCisgCTAsIC8qIHJzYV92ZXJpZnkgKi8KK0BAIC0xNTAsNiArMTU0 LDE2IEBAIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9QS0NTMV9TU0xlYXkodm9pZCkKKyAJcmV0dXJu KCZyc2FfcGtjczFfZWF5X21ldGgpOworIAl9CisgCisrLyogVXNhZ2UgZXhhbXBsZTsKKysgKiAg ICBNT05UX0hFTFBFUihyc2EsIGJuX2N0eCwgcCwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hF X1BSSVZBVEUsIGdvdG8gZXJyKTsKKysgKi8KKysjZGVmaW5lIE1PTlRfSEVMUEVSKHJzYSwgY3R4 LCBtLCBwcmVfY29uZCwgZXJyX2luc3RyKSBcCisrCWlmKChwcmVfY29uZCkgJiYgKChyc2EpLT5f bWV0aG9kX21vZF8jI20gPT0gTlVMTCkgJiYgXAorKwkJCSFCTl9NT05UX0NUWF9zZXRfbG9ja2Vk KCYoKHJzYSktPl9tZXRob2RfbW9kXyMjbSksIFwKKysJCQkJQ1JZUFRPX0xPQ0tfUlNBLCBcCisr CQkJCShyc2EpLT5tLCAoY3R4KSkpIFwKKysJCWVycl9pbnN0cgorKworIHN0YXRpYyBpbnQgUlNB X2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwK KyAJICAgICB1bnNpZ25lZCBjaGFyICp0bywgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIAl7CitA QCAtMTU4LDYgKzE3MiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50 IGZsCisgCXVuc2lnbmVkIGNoYXIgKmJ1Zj1OVUxMOworIAlCTl9DVFggKmN0eD1OVUxMOworIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkpCisrCQl7CisrCQlpZiAoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9Q VUJMSUNfRU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCWdvdG8gZXJy OworKwkJCX0KKysKKysJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQ U19NSU5fTU9EVUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJM SUNfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7Cisr CQkJfQorKwkJfQorKyNlbmRpZgorKworIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5T U0xfUlNBX01BWF9NT0RVTFVTX0JJVFMpCisgCQl7CisgCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9Q VUJMSUNfRU5DUllQVCwgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTIyMyw5ICsyNTQs NyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCisgCQlnb3RvIGVy cjsKKyAJCX0KKyAKKy0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCist CQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRP X0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJZ290byBlcnI7CisrCU1PTlRfSEVMUEVSKHJz YSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7 CisgCisgCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxyc2EtPm4sY3R4 LAorIAkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7CitAQCAtMzU1LDYgKzM4NCwyMyBA QCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCisgCWludCBsb2NhbF9i bGluZGluZyA9IDA7CisgCUJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7CisgCisrI2lmZGVm IE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0 ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVf RU5DUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJCWdvdG8gZXJyOworKwkJ CX0KKysKKysJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0VO Q1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0K KysJCX0KKysjZW5kaWYKKysKKyAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3Rv IGVycjsKKyAJQk5fQ1RYX3N0YXJ0KGN0eCk7CisgCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKK0BA IC00MzIsOSArNDc4LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQg ZgorIAkJZWxzZQorIAkJCWQ9IHJzYS0+ZDsKKyAKKy0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZM QUdfQ0FDSEVfUFVCTElDKQorLQkJCWlmKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9t ZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQorLQkJCQlnb3RvIGVy cjsKKysJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FD SEVfUFVCTElDLCBnb3RvIGVycik7CisgCisgCQlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChy ZXQsZixkLHJzYS0+bixjdHgsCisgCQkJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdvdG8gZXJyOwor QEAgLTQ4OCw2ICs1MzIsMjMgQEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChp bnQgZgorIAlpbnQgbG9jYWxfYmxpbmRpbmcgPSAwOworIAlCTl9CTElORElORyAqYmxpbmRpbmcg PSBOVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJ eworKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJCQl7CisrCQkJRklQU2VycihGSVBT X0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsK KysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9Q RU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKKysJCQl7CisrCQkJUlNBZXJyKFJTQV9G X1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJ CXJldHVybiAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmKChjdHggPSBCTl9DVFhf bmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4KTsKKyAJZiAgID0g Qk5fQ1RYX2dldChjdHgpOworQEAgLTU1NSw5ICs2MTYsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlf cHJpdmF0ZV9kZWNyeXB0KGludCBmCisgCQllbHNlCisgCQkJZCA9IHJzYS0+ZDsKKyAKKy0JCWlm IChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQorLQkJCWlmICghQk5fTU9OVF9D VFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+ biwgY3R4KSkKKy0JCQkJZ290byBlcnI7CisrCQlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNh LT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOworIAkJaWYgKCFyc2Et Pm1ldGgtPmJuX21vZF9leHAocmV0LGYsZCxyc2EtPm4sY3R4LAorIAkJCQlyc2EtPl9tZXRob2Rf bW9kX24pKQorIAkJICBnb3RvIGVycjsKK0BAIC02MTcsNiArNjc2LDIzIEBAIHN0YXRpYyBpbnQg UlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKKyAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7 CisgCUJOX0NUWCAqY3R4PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQ U19tb2RlKCkpCisrCQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJ CQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZU RVNUX0ZBSUxFRCk7CisrCQkJZ290byBlcnI7CisrCQkJfQorKworKwkJaWYgKEJOX251bV9iaXRz KHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCQkJeworKwkJ CVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09f U01BTEwpOworKwkJCXJldHVybiAtMTsKKysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChC Tl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsK KyAJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RP T19MQVJHRSk7CitAQCAtNjY3LDkgKzc0Myw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNf ZGVjcnlwdChpbnQgZmwKKyAJCWdvdG8gZXJyOworIAkJfQorIAorLQlpZiAocnNhLT5mbGFncyAm IFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykKKy0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgm cnNhLT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKKy0JCQln b3RvIGVycjsKKysJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxB R19DQUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKKyAKKyAJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9l eHAocmV0LGYscnNhLT5lLHJzYS0+bixjdHgsCisgCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3Rv IGVycjsKK0BAIC03MTcsNiArNzkxLDcgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklH TlVNICpyMCwgYworIAlCSUdOVU0gKnIxLCptMSwqdnJmeTsKKyAJQklHTlVNIGxvY2FsX2RtcDEs bG9jYWxfZG1xMSxsb2NhbF9jLGxvY2FsX3IxOworIAlCSUdOVU0gKmRtcDEsKmRtcTEsKmMsKnBy MTsKKysJaW50IGJuX2ZsYWdzOworIAlpbnQgcmV0PTA7CisgCisgCUJOX0NUWF9zdGFydChjdHgp OworQEAgLTcyNCw0MSArNzk5LDMxIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05V TSAqcjAsIGMKKyAJbTEgPSBCTl9DVFhfZ2V0KGN0eCk7CisgCXZyZnkgPSBCTl9DVFhfZ2V0KGN0 eCk7CisgCistCXsKKy0JCUJJR05VTSBsb2NhbF9wLCBsb2NhbF9xOworLQkJQklHTlVNICpwID0g TlVMTCwgKnEgPSBOVUxMOworLQorLQkJLyogTWFrZSBzdXJlIEJOX21vZF9pbnZlcnNlIGluIE1v bnRnb21lcnkgaW50aWFsaXphdGlvbiB1c2VzIHRoZQorLQkJICogQk5fRkxHX0NPTlNUVElNRSBm bGFnICh1bmxlc3MgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FIGlzIHNldCkKKy0JCSAqLworLQkJaWYg KCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCistCQkJeworLQkJCUJOX2lu aXQoJmxvY2FsX3ApOworLQkJCXAgPSAmbG9jYWxfcDsKKy0JCQlCTl93aXRoX2ZsYWdzKHAsIHJz YS0+cCwgQk5fRkxHX0NPTlNUVElNRSk7CistCistCQkJQk5faW5pdCgmbG9jYWxfcSk7CistCQkJ cSA9ICZsb2NhbF9xOworLQkJCUJOX3dpdGhfZmxhZ3MocSwgcnNhLT5xLCBCTl9GTEdfQ09OU1RU SU1FKTsKKy0JCQl9CistCQllbHNlCistCQkJeworLQkJCXAgPSByc2EtPnA7CistCQkJcSA9IHJz YS0+cTsKKy0JCQl9CisrCS8qIE1ha2Ugc3VyZSBtb2RfaW52ZXJzZSBpbiBtb250Z29tZXJleSBp bnRpYWxpemF0aW9uIHVzZSBjb3JyZWN0IAorKwkgKiBCTl9GTEdfQ09OU1RUSU1FIGZsYWcuCisr CSAqLworKwlibl9mbGFncyA9IHJzYS0+cC0+ZmxhZ3M7CisrCWlmICghKHJzYS0+ZmxhZ3MgJiBS U0FfRkxBR19OT19DT05TVFRJTUUpKQorKwkJeworKwkJcnNhLT5wLT5mbGFncyB8PSBCTl9GTEdf Q09OU1RUSU1FOworKwkJfQorKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcCwgcnNhLT5mbGFncyAm IFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJyKTsKKysJLyogV2UgcmVzdG9yZSBibl9m bGFncyBiYWNrICovCisrCXJzYS0+cC0+ZmxhZ3MgPSBibl9mbGFnczsKKyAKKy0JCWlmIChyc2Et PmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSkKKy0JCQl7CistCQkJaWYgKCFCTl9NT05U X0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX3AsIENSWVBUT19MT0NLX1JTQSwgcCwg Y3R4KSkKKy0JCQkJZ290byBlcnI7CistCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZy c2EtPl9tZXRob2RfbW9kX3EsIENSWVBUT19MT0NLX1JTQSwgcSwgY3R4KSkKKy0JCQkJZ290byBl cnI7CistCQkJfQorLQl9CisrICAgICAgICAvKiBNYWtlIHN1cmUgbW9kX2ludmVyc2UgaW4gbW9u dGdvbWVyZXkgaW50aWFsaXphdGlvbiB1c2UgY29ycmVjdAorKyAgICAgICAgICogQk5fRkxHX0NP TlNUVElNRSBmbGFnLgorKyAgICAgICAgICovCisrCWJuX2ZsYWdzID0gcnNhLT5xLT5mbGFnczsK KysJaWYgKCEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCisrCQl7CisrCQly c2EtPnEtPmZsYWdzIHw9IEJOX0ZMR19DT05TVFRJTUU7CisrCQl9CisrCU1PTlRfSEVMUEVSKHJz YSwgY3R4LCBxLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIp OworKwkvKiBXZSByZXN0b3JlIGJuX2ZsYWdzIGJhY2sgKi8KKysJcnNhLT5xLT5mbGFncyA9IGJu X2ZsYWdzOwkKKyAKKy0JaWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCist CQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRP X0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJZ290byBlcnI7CisrCU1PTlRfSEVMUEVSKHJz YSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7 CisgCisgCS8qIGNvbXB1dGUgSSBtb2QgcSAqLworIAlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZM QUdfTk9fQ09OU1RUSU1FKSkKK0BAIC04NzUsNiArOTQwLDkgQEAgZXJyOgorIAorIHN0YXRpYyBp bnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NB Q0hFX1BVQkxJQ3xSU0FfRkxBR19DQUNIRV9QUklWQVRFOworIAlyZXR1cm4oMSk7CisgCX0KK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEu MC4wL2NyeXB0by9yc2EvcnNhX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3Jz YV9lcnIuYy5maXBzCTIwMDgtMTItMjkgMTc6MTE6NTYuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAorQEAgLTExMSw4ICsxMTEsMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBS U0Ffc3RyX2Z1bmN0c1tdPQorIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJTlRfRlApLAkiUlNBX3By aW50X2ZwIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWX0RFQ09ERSksCSJSU0FfUFJJVl9E RUNPREUifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZfRU5DT0RFKSwJIlJTQV9QUklWX0VO Q09ERSJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUKSwJIlJTQV9wcml2 YXRlX2VuY3J5cHQifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLAkiUlNBX1BV Ql9ERUNPREUifSwKKyt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9w dWJsaWNfZGVjcnlwdCJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLAki UlNBX3NldHVwX2JsaW5kaW5nIn0sCisre0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9N RVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhvZCJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0Ff U0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lH TiksCSJSU0Ffc2lnbiJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09DVEVUX1NU UklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9LAorIHtFUlJfRlVOQyhSU0FfRl9S U0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKK0BAIC0xNTUsMTAgKzE1OSwxMiBAQCBzdGF0aWMg RVJSX1NUUklOR19EQVRBIFJTQV9zdHJfcmVhc29uc1tdCisge0VSUl9SRUFTT04oUlNBX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAorIHtFUlJfUkVBU09O KFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRCkgICAgLCJsYXN0IG9jdGV0IGludmFsaWQifSwKKyB7 RVJSX1JFQVNPTihSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0b28gbGFy Z2UifSwKKyt7RVJSX1JFQVNPTihSU0FfUl9OT05fRklQU19NRVRIT0QpICAgICAgICwibm9uIGZp cHMgbWV0aG9kIn0sCisge0VSUl9SRUFTT04oUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5UKSAgICAs Im5vIHB1YmxpYyBleHBvbmVudCJ9LAorIHtFUlJfUkVBU09OKFJTQV9SX05VTExfQkVGT1JFX0JM T0NLX01JU1NJTkcpLCJudWxsIGJlZm9yZSBibG9jayBtaXNzaW5nIn0sCisge0VSUl9SRUFTT04o UlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EpICAsIm4gZG9lcyBub3QgZXF1YWwgcCBxIn0sCisg e0VSUl9SRUFTT04oUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUikgICAsIm9hZXAgZGVjb2Rpbmcg ZXJyb3IifSwKKyt7RVJSX1JFQVNPTihSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQ U19NT0RFKSwib3BlcmF0aW9uIG5vdCBhbGxvd2VkIGluIGZpcHMgbW9kZSJ9LAorIHtFUlJfUkVB U09OKFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUpLCJvcGVy YXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0eXBlIn0sCisge0VSUl9SRUFTT04oUlNB X1JfUEFERElOR19DSEVDS19GQUlMRUQpICAsInBhZGRpbmcgY2hlY2sgZmFpbGVkIn0sCisge0VS Ul9SRUFTT04oUlNBX1JfUF9OT1RfUFJJTUUpICAgICAgICAgICAsInAgbm90IHByaW1lIn0sCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vcnNhL3JzYV9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9y c2FfZ2VuLmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI3LjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZ2VuLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAw MDAwMDAgKzAyMDAKK0BAIC02Nyw2ICs2Nyw4MiBAQAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgor ICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlw c19sb2NsLmgiCisrCisrc3RhdGljIGludCBmaXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKKysK Kyt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpCisrCXsKKysJZmlwc19yc2FfcGFp cndpc2VfZmFpbCA9IDE7CisrCX0KKysKKytpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCisr CXsKKysJY29uc3QgdW5zaWduZWQgY2hhciB0YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0 YSI7CisrCXVuc2lnbmVkIGNoYXIgKmN0YnVmID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKKysJaW50 IGxlbiwgcmV0ID0gMDsKKysJRVZQX1BLRVkgKnBrOworKworKwlpZiAoKHBrPUVWUF9QS0VZX25l dygpKSA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCisrCUVWUF9QS0VZX3NldDFfUlNBKHBrLCBy c2EpOworKworKwkvKiBQZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0 ICovCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5V TEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCisrCQl8 fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAorKwkJCU5VTEwsIDAsIEVW UF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKKysJCXx8ICFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsIE5VTEwpKQorKwkJZ290byBlcnI7CisrCS8qIE5vdyBw ZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCisrCWN0 YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7CisrCWlmICghY3RidWYpCisrCQln b3RvIGVycjsKKysKKysJbGVuID0gUlNBX3B1YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwg dGJzLCBjdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrCWlmIChsZW4gPD0gMCkKKysJ CWdvdG8gZXJyOworKwkvKiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0 ICovCisrCWlmICgobGVuID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3Ri dWYsIGxlbikpCisrCQlnb3RvIGVycjsKKysJcHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6 ZShyc2EpKTsKKysKKysJaWYgKCFwdGJ1ZikKKysJCWdvdG8gZXJyOworKwlsZW4gPSBSU0FfcHJp dmF0ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsK KysJaWYgKGxlbiAhPSAoc2l6ZW9mKHRicykgLSAxKSkKKysJCWdvdG8gZXJyOworKwlpZiAobWVt Y21wKHB0YnVmLCB0YnMsIGxlbikpCisrCQlnb3RvIGVycjsKKysKKysJcmV0ID0gMTsKKysKKysJ aWYgKCFwdGJ1ZikKKysJCWdvdG8gZXJyOworKwkKKysJZXJyOgorKwlpZiAocmV0ID09IDApCisr CQl7CisrCQlmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBT X0NIRUNLX1JTQSxGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKwkJfQorKworKwlpZiAo Y3RidWYpCisrCQlPUEVOU1NMX2ZyZWUoY3RidWYpOworKwlpZiAocHRidWYpCisrCQlPUEVOU1NM X2ZyZWUocHRidWYpOworKwlpZiAocGspCisrCQlFVlBfUEtFWV9mcmVlKHBrKTsKKysKKysJcmV0 dXJuIHJldDsKKysJfQorKyNlbmRpZgorIAorIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2Vu KFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOworIAor QEAgLTkwLDYgKzE2NiwyMyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJz YSwgCisgCWludCBiaXRzcCxiaXRzcSxvaz0gLTEsbj0wOworIAlCTl9DVFggKmN0eD1OVUxMOwor IAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJaWYo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAgIAl7CisrCQkgICAgRklQU2VycihGSVBTX0Zf UlNBX0JVSUxUSU5fS0VZR0VOLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICAJ cmV0dXJuIDA7CisrCSAgICAJfQorKworKwkJaWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpCisrCQkgICAgeworKwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlM VElOX0tFWUdFTixGSVBTX1JfS0VZX1RPT19TSE9SVCk7CisrCQkgICAgcmV0dXJuIDA7CisrCQkJ fQorKwkJfQorKyNlbmRpZgorKworIAljdHg9Qk5fQ1RYX25ldygpOworIAlpZiAoY3R4ID09IE5V TEwpIGdvdG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4KTsKK0BAIC0yMDEsNiArMjk0LDE3IEBA IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCAKKyAJCXAgPSByc2EtPnA7 CisgCWlmICghQk5fbW9kX2ludmVyc2UocnNhLT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJy OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJeworKwkJ aWYgKGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwpCisrCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsK KysKKysJCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQorKwkJICAgIGdvdG8gZXJyOworKwkJfQor KyNlbmRpZgorKworIAlvaz0xOworIGVycjoKKyAJaWYgKG9rID09IC0xKQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNh L3JzYS5oCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYS5oLmZpcHMJMjAxMC0wMy0z MCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2Ev cnNhLmgJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC03NCw2ICs3NCwy MSBAQAorICNlcnJvciBSU0EgaXMgZGlzYWJsZWQuCisgI2VuZGlmCisgCisrLyogSWYgdGhpcyBm bGFnIGlzIHNldCB0aGUgUlNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVz ZWQKKysgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxl IG1ldGhvZC4gSWYgYW4KKysgKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3du IG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQorKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0 IGlzIGNvbXBsaWFudC4KKysgKi8KKysKKysjZGVmaW5lIFJTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJ MHgwNDAwCisrCisrLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxs eSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCisrICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhl IGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUKKysgKiB1c2Fn ZSBpcyBjb21wbGlhbnQuCisrICovCisrCisrI2RlZmluZSBSU0FfRkxBR19OT05fRklQU19BTExP VwkJCTB4MDQwMAorKworICNpZmRlZiAgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5k aWYKK0BAIC0xNjQsNiArMTc5LDggQEAgc3RydWN0IHJzYV9zdAorICMgZGVmaW5lIE9QRU5TU0xf UlNBX01BWF9NT0RVTFVTX0JJVFMJMTYzODQKKyAjZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xf UlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgI2lmbmRlZiBPUEVOU1NMX1JTQV9T TUFMTF9NT0RVTFVTX0JJVFMKKyAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJ VFMJMzA3MgorICNlbmRpZgorQEAgLTI2Nyw2ICsyODQsMTEgQEAgUlNBICoJUlNBX2dlbmVyYXRl X2tleShpbnQgYml0cywgdW5zaWduZQorIAorIC8qIE5ldyB2ZXJzaW9uICovCisgaW50CVJTQV9n ZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpj Yik7CisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVN ICpwMiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKKysJCQljb25zdCBCSUdOVU0gKlhwMSwgY29u c3QgQklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICpYcTEs IGNvbnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAorKwkJCWNvbnN0IEJJR05VTSAq ZSwgQk5fR0VOQ0IgKmNiKTsKKytpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNh LCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOworIAorIGludAlSU0Ff Y2hlY2tfa2V5KGNvbnN0IFJTQSAqKTsKKyAJLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAq LworQEAgLTQzOCw4ICs0NjAsMTIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsK KyAjZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkgMTE2CisgI2RlZmluZSBSU0FfRl9SU0Ff UFJJVl9ERUNPREUJCQkJIDEzNworICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAx MzgKKysjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTQ4CisgI2RlZmluZSBS U0FfRl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5CisrI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RF Q1JZUFQJCQkgMTQ5CisgI2RlZmluZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcJCQkgMTM2Cisr I2RlZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ECQkJIDE1MAorKyNkZWZpbmUgUlNB X0ZfUlNBX1NFVF9NRVRIT0QJCQkJIDE1MQorICNkZWZpbmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAx MTcKKyAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HCQkgMTE4CisgI2Rl ZmluZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKK0BAIC00NzksMTAgKzUwNSwxMiBAQCB2b2lk IEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9P X1NNQUxMCQkJIDEyMAorICNkZWZpbmUgUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElECQkJIDEzNAor ICNkZWZpbmUgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwNQorKyNkZWZpbmUgUlNBX1Jf Tk9OX0ZJUFNfTUVUSE9ECQkJCSAxNDkKKyAjZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVO VAkJCSAxNDAKKyAjZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEz CisgI2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKKyAjZGVmaW5lIFJT QV9SX09BRVBfREVDT0RJTkdfRVJST1IJCQkgMTIxCisrI2RlZmluZSBSU0FfUl9PUEVSQVRJT05f Tk9UX0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKKyAjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9O T1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAorICNkZWZpbmUgUlNBX1JfUEFERElO R19DSEVDS19GQUlMRUQJCQkgMTE0CisgI2RlZmluZSBSU0FfUl9QX05PVF9QUklNRQkJCQkgMTI4 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3BlbnNz bC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9saWIuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3Jz YS9yc2FfbGliLmMuZmlwcwkyMDA5LTEyLTA5IDE0OjM4OjIwLjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfbGliLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4w MDAwMDAwMDAgKzAyMDAKK0BAIC04MCw2ICs4MCwxMyBAQCBSU0EgKlJTQV9uZXcodm9pZCkKKyAK KyB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKKyAJ eworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+Zmxh Z3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NF VF9ERUZBVUxUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJCXJldHVybjsKKysJ CX0KKysjZW5kaWYKKyAJZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7CisgCX0KKyAKK0BAIC0xMTEs NiArMTE4LDEzIEBAIGludCBSU0Ffc2V0X21ldGhvZChSU0EgKnJzYSwgY29uc3QgUlNBX00KKyAJ LyogTkI6IFRoZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNldHRpbmcgYSBtZXRob2QsIHNvIGl0 J3Mgbm90IHVwIHRvIHVzCisgCSAqIHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMg ZnJvbS4gKi8KKyAJY29uc3QgUlNBX01FVEhPRCAqbXRtcDsKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRI T0QpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQ U19NRVRIT0QpOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgCW10bXAgPSByc2EtPm1l dGg7CisgCWlmIChtdG1wLT5maW5pc2gpIG10bXAtPmZpbmlzaChyc2EpOworICNpZm5kZWYgT1BF TlNTTF9OT19FTkdJTkUKK0BAIC0xNjMsNiArMTc3LDE4IEBAIFJTQSAqUlNBX25ld19tZXRob2Qo RU5HSU5FICplbmdpbmUpCisgCQkJfQorIAkJfQorICNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJ UFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfTkVXX01FVEhPRCwgUlNBX1Jf Tk9OX0ZJUFNfTUVUSE9EKTsKKysjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisrCQlpZiAocmV0 LT5lbmdpbmUpCisrCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7CisrI2VuZGlmCisrCQlP UEVOU1NMX2ZyZWUocmV0KTsKKysJCXJldHVybiBOVUxMOworKwkJfQorKyNlbmRpZgorIAorIAly ZXQtPnBhZD0wOworIAlyZXQtPnZlcnNpb249MDsKK0BAIC0yOTQsNiArMzIwLDEzIEBAIGludCBS U0FfcHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUKKyBpbnQgUlNBX3ByaXZhdGVfZW5j cnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAq dG8sCisgCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIAl7CisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNB X1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJ CX0KKysjZW5kaWYKKyAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGZsZW4sIGZyb20s IHRvLCByc2EsIHBhZGRpbmcpKTsKKyAJfQorIAorQEAgLTMwNiw2ICszMzksMTMgQEAgaW50IFJT QV9wcml2YXRlX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IAorIGludCBSU0FfcHVibGljX2RlY3J5 cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVkIGNoYXIgKnRv LAorIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1Jf T1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQlyZXR1cm4gMDsKKysJCX0K KysjZW5kaWYKKyAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoZmxlbiwgZnJvbSwgdG8s IHJzYSwgcGFkZGluZykpOworIAl9CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9y c2EvcnNhX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCist LS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDA3LTA0LTI0IDAz OjA1OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2Ff c2lnbi5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTMwLDcgKzEz MCw4IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAJCWkyZF9Y NTA5X1NJRygmc2lnLCZwKTsKKyAJCXM9dG1wczsKKyAJfQorLQlpPVJTQV9wcml2YXRlX2VuY3J5 cHQoaSxzLHNpZ3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkvKiBOQjogY2FsbCB1bmRl cmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrCWkgPSBy c2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdy ZXQscnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCWlmIChpIDw9IDApCisgCQlyZXQ9MDsK KyAJZWxzZQorQEAgLTE2MSw4ICsxNjIsOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBl LCBjb25zdCB1bnNpCisgCisgCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQorIAkJ eworLQkJaSA9IFJTQV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKKy0JCQkJCXNpZ2J1Zixy bSxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOworKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMg PyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAorKwkJCQkJc2lnYnVmLHJtLHJz YSxSU0FfUEtDUzFfUEFERElORykgOiAwOworIAkJaWYgKGkgPD0gMCkKKyAJCQlyZXR1cm4gMDsK KyAJCSpwcm1fbGVuID0gaTsKK0BAIC0xNzksNyArMTgwLDggQEAgaW50IGludF9yc2FfdmVyaWZ5 KGludCBkdHlwZSwgY29uc3QgdW5zaQorIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxS U0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKKyAJCQlnb3RvIGVycjsKKyAJfQorLQlpPVJT QV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJ TkcpOworKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBG SVBTIGJsb2NraW5nICovCisrCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRo LT5yc2FfcHViX2RlYygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcp IDogMDsKKyAKKyAJaWYgKGkgPD0gMCkgZ290byBlcnI7CisgCitkaWZmIC11cCBvcGVuc3NsLTEu MC4wL2NyeXB0by9zZWVkL3NlZWQuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NlZWQvc2Vl ZC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2VlZC9zZWVkLmMuZmlwcwkyMDA4LTEyLTE2 IDA4OjQxOjIxLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NlZWQv c2VlZC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMzQsNiArMzQs OSBAQAorIAorICNpbmNsdWRlIDxvcGVuc3NsL3NlZWQuaD4KKyAjaW5jbHVkZSAic2VlZF9sb2Ns LmgiCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKyAKKyBzdGF0aWMgY29uc3Qgc2VlZF93b3JkIFNTWzRdWzI1Nl0gPSB7CXsKKyAJMHgy OTg5YTFhOCwgMHgwNTg1ODE4NCwgMHgxNmM2ZDJkNCwgMHgxM2MzZDNkMCwgMHgxNDQ0NTA1NCwg MHgxZDBkMTExYywgMHgyYzhjYTBhYywgMHgyNTA1MjEyNCwKK0BAIC0xOTMsNyArMTk2LDE4IEBA IHN0YXRpYyBjb25zdCBzZWVkX3dvcmQgS0NbXSA9IHsKKyAJS0M4LAlLQzksCUtDMTAsCUtDMTEs CUtDMTIsCUtDMTMsCUtDMTQsCUtDMTUJfTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisgdm9pZCBTRUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9L RVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUgKmtzKQorKyAgICAgICAgeworKyAgICAgICAg aWYgKEZJUFNfbW9kZSgpKQorKyAgICAgICAgICAgICAgICBGSVBTX0JBRF9BQk9SVChTRUVEKQor KyAgICAgICAgcHJpdmF0ZV9TRUVEX3NldF9rZXkocmF3a2V5LCBrcyk7CisrICAgICAgICB9Cisr Cisrdm9pZCBwcml2YXRlX1NFRURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtT RUVEX0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpCisrI2Vsc2UKKyt2b2lkIFNF RURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVEX0tFWV9MRU5HVEhdLCBT RUVEX0tFWV9TQ0hFRFVMRSAqa3MpCisrI2VuZGlmCisgeworIAlzZWVkX3dvcmQgeDEsIHgyLCB4 MywgeDQ7CisgCXNlZWRfd29yZCB0MCwgdDE7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9zZWVkL3NlZWQuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NlZWQvc2VlZC5oCistLS0g b3BlbnNzbC0xLjAuMC9jcnlwdG8vc2VlZC9zZWVkLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1 LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NlZWQvc2VlZC5oCTIw MTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTE3LDYgKzExNyw5IEBAIHR5 cGVkZWYgc3RydWN0IHNlZWRfa2V5X3N0IHsKKyB9IFNFRURfS0VZX1NDSEVEVUxFOworIAorIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt2b2lkIHByaXZhdGVfU0VFRF9zZXRfa2V5KGNvbnN0IHVu c2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICpr cyk7CisrI2VuZGlmCisgdm9pZCBTRUVEX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciByYXdr ZXlbU0VFRF9LRVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUgKmtzKTsKKyAKKyB2b2lkIFNF RURfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyIHNbU0VFRF9CTE9DS19TSVpFXSwgdW5zaWdu ZWQgY2hhciBkW1NFRURfQkxPQ0tfU0laRV0sIGNvbnN0IFNFRURfS0VZX1NDSEVEVUxFICprcyk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhX2Rnc3QuYy5maXBzIG9wZW5z c2wtMS4wLjAvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8v c2hhL3NoYV9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6 NDEuMDAwMDAwMDAwICswMjAwCitAQCAtNTcsNiArNTcsMTIgQEAKKyAgKi8KKyAKKyAjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlm CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisgI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9f U0hBMCkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpCisgCisgI3VuZGVmICBTSEFfMQorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC9j cnlwdG8vc2hhL3NoYS5oCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJ MjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9zaGEvc2hhLmgJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0x MDYsNiArMTA2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBc3RhdGVfc3QKKyAJfSBTSEFfQ1RYOwor IAorICNpZm5kZWYgT1BFTlNTTF9OT19TSEEwCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBw cml2YXRlX1NIQV9Jbml0KFNIQV9DVFggKmMpOworKyNlbmRpZgorIGludCBTSEFfSW5pdChTSEFf Q1RYICpjKTsKKyBpbnQgU0hBX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBz aXplX3QgbGVuKTsKKyBpbnQgU0hBX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpj KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYV9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0 by9zaGEvc2hhX2xvY2wuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYV9sb2NsLmgJMjAxMC0wMy0zMCAxMDoz NDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjIsOCArMTIyLDE1IEBAIHZvaWQgc2hhMV9ibG9j a19kYXRhX29yZGVyIChTSEFfQ1RYICpjLCAKKyAjZGVmaW5lIElOSVRfREFUQV9oMyAweDEwMzI1 NDc2VUwKKyAjZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJlMWYwVUwKKyAKKysjaWYgZGVmaW5l ZChTSEFfMCkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrRklQU19OT05fRklQU19NRF9Jbml0 KFNIQSkKKysjZWxzZQorIGludCBIQVNIX0lOSVQgKFNIQV9DVFggKmMpCisrI2VuZGlmCisgCXsK KysjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrCUZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMt PmgwPUlOSVRfREFUQV9oMDsKKyAJYy0+aDE9SU5JVF9EQVRBX2gxOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9z aGEvc2hhMWRnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGExZGdzdC5jLmZp cHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9zaGEvc2hhMWRnc3QuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIw MAorQEAgLTYzLDYgKzYzLDEwIEBACisgI2RlZmluZSBTSEFfMQorIAorICNpbmNsdWRlIDxvcGVu c3NsL29wZW5zc2x2Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIFNIQTFfdmVyc2lvbltdPSJTSEEx IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhMjU2LmMKKy0t LSBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3 OjE0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGEyNTYu YwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTEyLDEyICsxMiwxOSBA QAorIAorICNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3No YS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisrCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKyAKKyBjb25zdCBjaGFy IFNIQTI1Nl92ZXJzaW9uW109IlNIQS0yNTYiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKKyBp bnQgU0hBMjI0X0luaXQgKFNIQTI1Nl9DVFggKmMpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJbWVtc2V0IChjLDAsc2l6ZW9m KCpjKSk7CisgCWMtPmhbMF09MHhjMTA1OWVkOFVMOwljLT5oWzFdPTB4MzY3Y2Q1MDdVTDsKKyAJ Yy0+aFsyXT0weDMwNzBkZDE3VUw7CWMtPmhbM109MHhmNzBlNTkzOVVMOworQEAgLTI5LDYgKzM2 LDkgQEAgaW50IFNIQTIyNF9Jbml0IChTSEEyNTZfQ1RYICpjKQorIAorIGludCBTSEEyNTZfSW5p dCAoU0hBMjU2X0NUWCAqYykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxm dGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+ aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09MHhiYjY3YWU4NVVMOworIAljLT5oWzJdPTB4M2M2 ZWYzNzJVTDsJYy0+aFszXT0weGE1NGZmNTNhVUw7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Ny eXB0by9zaGEvc2hhNTEyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhNTEyLmMK Ky0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDA5LTEyLTMwIDEy OjUzOjMzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGE1 MTIuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTUsNiArNSwxMCBA QAorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisgICovCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYu aD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNl bmRpZgorKworICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNT TF9OT19TSEE1MTIpCisgLyoKKyAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KK0BAIC02MSw2ICs2 NSw5IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXT0iU0hBLTUxMiIgT1AKKyAKKyBpbnQg U0hBMzg0X0luaXQgKFNIQTUxMl9DVFggKmMpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAjaWYgZGVmaW5lZChTSEE1MTJfQVNN KSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKKyAJLyogbWFpbnRhaW4g ZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLworIAl1bnNpZ25lZCBp bnQgKmggPSAodW5zaWduZWQgaW50ICopYy0+aDsKK0BAIC05MCw2ICs5Nyw5IEBAIGludCBTSEEz ODRfSW5pdCAoU0hBNTEyX0NUWCAqYykKKyAKKyBpbnQgU0hBNTEyX0luaXQgKFNIQTUxMl9DVFgg KmMpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK KysjZW5kaWYKKyAjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8 fCBkZWZpbmVkKF9fYXJtKSkKKyAJLyogbWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkg YXNzZW1ibGVyIG1vZHVsZSAqLworIAl1bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICop Yy0+aDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3docmxwb29sL3docmxwb29sLmgu ZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by93aHJscG9vbC93aHJscG9vbC5oCistLS0gb3BlbnNz bC0xLjAuMC9jcnlwdG8vd2hybHBvb2wvd2hybHBvb2wuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6 NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vd2hybHBvb2wvd2hy bHBvb2wuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTI0LDYgKzI0 LDkgQEAgdHlwZWRlZiBzdHJ1Y3QJeworIAl9IFdISVJMUE9PTF9DVFg7CisgCisgI2lmbmRlZiBP UEVOU1NMX05PX1dISVJMUE9PTAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9X SElSTFBPT0xfSW5pdChXSElSTFBPT0xfQ1RYICpjKTsKKysjZW5kaWYKKyBpbnQgV0hJUkxQT09M X0luaXQJKFdISVJMUE9PTF9DVFggKmMpOworIGludCBXSElSTFBPT0xfVXBkYXRlCShXSElSTFBP T0xfQ1RYICpjLGNvbnN0IHZvaWQgKmlucCxzaXplX3QgYnl0ZXMpOworIHZvaWQgV0hJUkxQT09M X0JpdFVwZGF0ZShXSElSTFBPT0xfQ1RYICpjLGNvbnN0IHZvaWQgKmlucCxzaXplX3QgYml0cyk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcwkyMDA4LTEyLTI5IDEzOjM1OjQ5LjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYwky MDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTUzLDggKzUzLDEyIEBACisg CisgI2luY2x1ZGUgIndwX2xvY2wuaCIKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKyAKKy1pbnQgV0hJUkxQT09MX0luaXQJKFdISVJMUE9PTF9DVFgg KmMpCisrRklQU19OT05fRklQU19NRF9Jbml0KFdISVJMUE9PTCkKKyAJeworIAltZW1zZXQgKGMs MCxzaXplb2YoKmMpKTsKKyAJcmV0dXJuKDEpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9NYWtl ZmlsZS5vcmcuZmlwcyBvcGVuc3NsLTEuMC4wL01ha2VmaWxlLm9yZworLS0tIG9wZW5zc2wtMS4w LjAvTWFrZWZpbGUub3JnLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4wL01ha2VmaWxlLm9yZwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAorQEAgLTExMCw2ICsxMTAsOSBAQCBMSUJLUkI1PQorIFpMSUJfSU5DTFVERT0K KyBMSUJaTElCPQorIAorKyMgTm9uLWVtcHR5IGlmIEZJUFMgZW5hYmxlZAorK0ZJUFM9CisrCisg RElSUz0gICBjcnlwdG8gc3NsIGVuZ2luZXMgYXBwcyB0ZXN0IHRvb2xzCisgRU5HRElSUz0gY2Nn b3N0CisgU0hMSUJESVJTPSBjcnlwdG8gc3NsCitAQCAtMTIyLDcgKzEyNSw3IEBAIFNESVJTPSAg XAorIAlibiBlYyByc2EgZHNhIGVjZHNhIGRoIGVjZGggZHNvIGVuZ2luZSBcCisgCWJ1ZmZlciBi aW8gc3RhY2sgbGhhc2ggcmFuZCBlcnIgXAorIAlldnAgYXNuMSBwZW0geDUwOSB4NTA5djMgY29u ZiB0eHRfZGIgcGtjczcgcGtjczEyIGNvbXAgb2NzcCB1aSBrcmI1IFwKKy0JY21zIHBxdWV1ZSB0 cyBqcGFrZSBzdG9yZQorKwljbXMgcHF1ZXVlIHRzIGpwYWtlIHN0b3JlIGZpcHMKKyAjIGtlZXAg aW4gbWluZCB0aGF0IHRoZSBhYm92ZSBsaXN0IGlzIGFkanVzdGVkIGJ5IC4vQ29uZmlndXJlCisg IyBhY2NvcmRpbmcgdG8gbm8teHh4IGFyZ3VtZW50cy4uLgorIAorQEAgLTIwNiw2ICsyMDksNyBA QCBCVUlMREVOVj0JUExBVEZPUk09JyQoUExBVEZPUk0pJyBQUk9DRVNTCisgCQlSTUQxNjBfQVNN X09CSj0nJChSTUQxNjBfQVNNX09CSiknCQlcCisgCQlXUF9BU01fT0JKPSckKFdQX0FTTV9PQkop JwkJCVwKKyAJCVBFUkxBU01fU0NIRU1FPSckKFBFUkxBU01fU0NIRU1FKScJCVwKKysJCUZJUFM9 IiQke0ZJUFM6LSQoRklQUyl9IglcCisgCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtl ZmlsZSBNQUtFT1ZFUlJJREVTPQorICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFs aXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAorICMgd2hpY2ggaW4gdHVy biBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2NpcGguYy5maXBzIG9wZW5zc2wtMS4wLjAv c3NsL3NzbF9jaXBoLmMKKy0tLSBvcGVuc3NsLTEuMC4wL3NzbC9zc2xfY2lwaC5jLmZpcHMJMjAw OS0wOS0xMyAwMToxODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL3NzbC9z c2xfY2lwaC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtNzI3LDYg KzcyNyw5IEBAIHN0YXRpYyB2b2lkIHNzbF9jaXBoZXJfY29sbGVjdF9jaXBoZXJzKGMKKyAJCSAg ICAhKGMtPmFsZ29yaXRobV9hdXRoICYgZGlzYWJsZWRfYXV0aCkgJiYKKyAJCSAgICAhKGMtPmFs Z29yaXRobV9lbmMgJiBkaXNhYmxlZF9lbmMpICYmCisgCQkgICAgIShjLT5hbGdvcml0aG1fbWFj ICYgZGlzYWJsZWRfbWFjKSAmJgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQkoIUZJUFNfbW9k ZSgpIHx8IChjLT5hbGdvX3N0cmVuZ3RoICYgU1NMX0ZJUFMpKSAmJgorKyNlbmRpZgorIAkJICAg ICEoYy0+YWxnb3JpdGhtX3NzbCAmIGRpc2FibGVkX3NzbCkpCisgCQkJeworIAkJCWNvX2xpc3Rb Y29fbGlzdF9udW1dLmNpcGhlciA9IGM7CitAQCAtMTQyMyw3ICsxNDI2LDExIEBAIFNUQUNLX09G KFNTTF9DSVBIRVIpICpzc2xfY3JlYXRlX2NpcGhlcl8KKyAJICovCisgCWZvciAoY3VyciA9IGhl YWQ7IGN1cnIgIT0gTlVMTDsgY3VyciA9IGN1cnItPm5leHQpCisgCQl7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwkJaWYgKGN1cnItPmFjdGl2ZSAmJiAoIUZJUFNfbW9kZSgpIHx8IGN1cnItPmNp cGhlci0+YWxnb19zdHJlbmd0aCAmIFNTTF9GSVBTKSkKKysjZWxzZQorIAkJaWYgKGN1cnItPmFj dGl2ZSkKKysjZW5kaWYKKyAJCQl7CisgCQkJc2tfU1NMX0NJUEhFUl9wdXNoKGNpcGhlcnN0YWNr LCBjdXJyLT5jaXBoZXIpOworICNpZmRlZiBDSVBIRVJfREVCVUcKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAvc3NsL3NzbF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAvc3NsL3NzbF9saWIuYworLS0t IG9wZW5zc2wtMS4wLjAvc3NsL3NzbF9saWIuYy5maXBzCTIwMTAtMDItMTcgMjA6NDM6NDYuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2xpYi5jCTIwMTAtMDMtMzAg MTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTUyMSw2ICsxNTIxLDE0IEBAIFNTTF9DVFgg KlNTTF9DVFhfbmV3KGNvbnN0IFNTTF9NRVRIT0QgKm0KKyAJCXJldHVybihOVUxMKTsKKyAJCX0K KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAobWV0aC0+dmVy c2lvbiA8IFRMUzFfVkVSU0lPTikpCQorKwkJeworKwkJU1NMZXJyKFNTTF9GX1NTTF9DVFhfTkVX LCBTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERSk7CisrCQlyZXR1cm4gTlVMTDsK KysJCX0KKysjZW5kaWYKKysKKyAJaWYgKFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JFX0NUWF9p ZHgoKSA8IDApCisgCQl7CisgCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9ORVcsU1NMX1JfWDUwOV9W RVJJRklDQVRJT05fU0VUVVBfUFJPQkxFTVMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wv c3NsdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9zc2wvc3NsdGVzdC5jCistLS0gb3BlbnNzbC0x LjAuMC9zc2wvc3NsdGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wL3NzbC9zc2x0ZXN0LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4w MDAwMDAwMDAgKzAyMDAKK0BAIC0yNjgsNiArMjY4LDkgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uo dm9pZCkKKyAJeworIAlmcHJpbnRmKHN0ZGVyciwidXNhZ2U6IHNzbHRlc3QgW2FyZ3MgLi4uXVxu Iik7CisgCWZwcmludGYoc3RkZXJyLCJcbiIpOworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJZnBy aW50ZihzdGRlcnIsIi1GICAgICAgICAgICAgIC0gcnVuIHRlc3QgaW4gRklQUyBtb2RlXG4iKTsK KysjZW5kaWYKKyAJZnByaW50ZihzdGRlcnIsIiAtc2VydmVyX2F1dGggIC0gY2hlY2sgc2VydmVy IGNlcnRpZmljYXRlXG4iKTsKKyAJZnByaW50ZihzdGRlcnIsIiAtY2xpZW50X2F1dGggIC0gZG8g Y2xpZW50IGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAJZnByaW50ZihzdGRlcnIsIiAtcHJveHkgICAg ICAgIC0gYWxsb3cgcHJveHkgY2VydGlmaWNhdGVzXG4iKTsKK0BAIC00ODcsNiArNDkwLDkgQEAg aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAjZW5kaWYKKyAJU1RBQ0tfT0YoU1NM X0NPTVApICpzc2xfY29tcF9tZXRob2RzID0gTlVMTDsKKyAJaW50IHRlc3RfY2lwaGVybGlzdCA9 IDA7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpbnQgZmlwc19tb2RlPTA7CisrI2VuZGlmCisg CisgCXZlcmJvc2UgPSAwOworIAlkZWJ1ZyA9IDA7CitAQCAtNTE4LDcgKzUyNCwxNiBAQCBpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorIAl3aGlsZSAoYXJnYyA+PSAxKQorIAkJ eworLQkJaWYJKHN0cmNtcCgqYXJndiwiLXNlcnZlcl9hdXRoIikgPT0gMCkKKysJCWlmKCFzdHJj bXAoKmFyZ3YsIi1GIikpCisrCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQlmaXBzX21v ZGU9MTsKKysjZWxzZQorKwkJCWZwcmludGYoc3RkZXJyLCJub3QgY29tcGlsZWQgd2l0aCBGSVBT IHN1cHBvcnQsIHNvIGV4aXR0aW5nIHdpdGhvdXQgcnVubmluZy5cbiIpOworKwkJCUVYSVQoMCk7 CisrI2VuZGlmCisrCQkJfQorKwkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgi KSA9PSAwKQorIAkJCXNlcnZlcl9hdXRoPTE7CisgCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1j bGllbnRfYXV0aCIpID09IDApCisgCQkJY2xpZW50X2F1dGg9MTsKK0BAIC03MTQsNiArNzI5LDIw IEBAIGJhZDoKKyAJCUVYSVQoMSk7CisgCQl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlp ZihmaXBzX21vZGUpCisrCQl7CisrCQlpZighRklQU19tb2RlX3NldCgxKSkKKysJCQl7CisrCQkJ RVJSX2xvYWRfY3J5cHRvX3N0cmluZ3MoKTsKKysJCQlFUlJfcHJpbnRfZXJyb3JzKEJJT19uZXdf ZnAoc3RkZXJyLEJJT19OT0NMT1NFKSk7CisrCQkJRVhJVCgxKTsKKysJCQl9CisrCQllbHNlCisr CQkJZnByaW50ZihzdGRlcnIsIioqKiBJTiBGSVBTIE1PREUgKioqXG4iKTsKKysJCX0KKysjZW5k aWYKKysKKyAJaWYgKHByaW50X3RpbWUpCisgCQl7CisgCQlpZiAoIWJpb19wYWlyKQorQEAgLTIx NTYsMTIgKzIxODUsMTIgQEAgc3RhdGljIGludCBNU19DQUxMQkFDSyBhcHBfdmVyaWZ5X2NhbGxi YQorIAkJfQorIAorICNpZm5kZWYgT1BFTlNTTF9OT19YNTA5X1ZFUklGWQorLSMgaWZkZWYgT1BF TlNTTF9GSVBTCisrIyBpZiAwCisgCWlmKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQorIAkJ RklQU19hbGxvd19tZDUoMSk7CisgIyBlbmRpZgorIAlvayA9IFg1MDlfdmVyaWZ5X2NlcnQoY3R4 KTsKKy0jIGlmZGVmIE9QRU5TU0xfRklQUworKyMgaWYgMAorIAlpZihzLT52ZXJzaW9uID09IFRM UzFfVkVSU0lPTikKKyAJCUZJUFNfYWxsb3dfbWQ1KDApOworICMgZW5kaWYKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvc3NsL3MyM19jbG50LmMuZmlwcyBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfY2xu dC5jCistLS0gb3BlbnNzbC0xLjAuMC9zc2wvczIzX2NsbnQuYy5maXBzCTIwMTAtMDItMTYgMTU6 MjA6NDAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9zc2wvczIzX2NsbnQuYwky MDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTMzNCw2ICszMzQsMTQgQEAg c3RhdGljIGludCBzc2wyM19jbGllbnRfaGVsbG8oU1NMICpzKQorIAkJCXZlcnNpb25fbWFqb3Ig PSBUTFMxX1ZFUlNJT05fTUFKT1I7CisgCQkJdmVyc2lvbl9taW5vciA9IFRMUzFfVkVSU0lPTl9N SU5PUjsKKyAJCQl9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJZWxzZSBpZihGSVBTX21vZGUo KSkKKysJCQl7CisrCQkJU1NMZXJyKFNTTF9GX1NTTDIzX0NMSUVOVF9IRUxMTywKKysJCQkJCVNT TF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJ fQorKyNlbmRpZgorIAkJZWxzZSBpZiAodmVyc2lvbiA9PSBTU0wzX1ZFUlNJT04pCisgCQkJewor IAkJCXZlcnNpb25fbWFqb3IgPSBTU0wzX1ZFUlNJT05fTUFKT1I7CitAQCAtNjE3LDYgKzYyNSwx NCBAQCBzdGF0aWMgaW50IHNzbDIzX2dldF9zZXJ2ZXJfaGVsbG8oU1NMICpzCisgCQlpZiAoKHBb Ml0gPT0gU1NMM19WRVJTSU9OX01JTk9SKSAmJgorIAkJCSEocy0+b3B0aW9ucyAmIFNTTF9PUF9O T19TU0x2MykpCisgCQkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCQlpZihGSVBTX21vZGUo KSkKKysJCQkJeworKwkJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX1NFUlZFUl9IRUxMTywKKysJ CQkJCVNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCQkJZ290byBlcnI7 CisrCQkJCX0KKysjZW5kaWYKKyAJCQlzLT52ZXJzaW9uPVNTTDNfVkVSU0lPTjsKKyAJCQlzLT5t ZXRob2Q9U1NMdjNfY2xpZW50X21ldGhvZCgpOworIAkJCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAvc3NsL3MyM19zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfc3J2ci5jCistLS0g b3BlbnNzbC0xLjAuMC9zc2wvczIzX3NydnIuYy5maXBzCTIwMTAtMDItMTYgMTU6MjA6NDAuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9zc2wvczIzX3NydnIuYwkyMDEwLTAzLTMw IDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTM5Myw2ICszOTMsMTUgQEAgaW50IHNzbDIz X2dldF9jbGllbnRfaGVsbG8oU1NMICpzKQorIAkJCX0KKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAocy0+dmVyc2lvbiA8IFRMUzFfVkVSU0lPTikp CisrCQl7CisrCQlTU0xlcnIoU1NMX0ZfU1NMMjNfR0VUX0NMSUVOVF9IRUxMTywKKysJCQkJCVNT TF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCWdvdG8gZXJyOworKwkJfQor KyNlbmRpZgorKworIAlpZiAocy0+c3RhdGUgPT0gU1NMMjNfU1RfU1JfQ0xOVF9IRUxMT19CKQor IAkJeworIAkJLyogd2UgaGF2ZSBTU0x2My9UTFN2MSBpbiBhbiBTU0x2MiBoZWFkZXIKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAvc3NsL3MzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4wLjAvc3NsL3Mz X2NsbnQuYworLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3MzX2NsbnQuYy5maXBzCTIwMTAtMDItMjgg MDE6MjQ6MjQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9zc2wvczNfY2xudC5j CTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTU2LDYgKzE1NiwxMCBA QAorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9tZDUuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpZm5kZWYgT1BFTlNTTF9OT19E SAorICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisgI2VuZGlmCitAQCAtMTU0Niw2ICsxNTUwLDgg QEAgaW50IHNzbDNfZ2V0X2tleV9leGNoYW5nZShTU0wgKnMpCisgCQkJcT1tZF9idWY7CisgCQkJ Zm9yIChudW09MjsgbnVtID4gMDsgbnVtLS0pCisgCQkJCXsKKysJCQkJRVZQX01EX0NUWF9zZXRf ZmxhZ3MoJm1kX2N0eCwKKysJCQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Cisg CQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQorIAkJCQkJP3MtPmN0eC0+ bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7CisgCQkJCUVWUF9EaWdlc3RVcGRhdGUoJm1kX2N0eCwm KHMtPnMzLT5jbGllbnRfcmFuZG9tWzBdKSxTU0wzX1JBTkRPTV9TSVpFKTsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvc3NsL3MzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9zc2wvczNfZW5jLmMK Ky0tLSBvcGVuc3NsLTEuMC4wL3NzbC9zM19lbmMuYy5maXBzCTIwMDktMDQtMTYgMTk6MjI6NTAu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9zc2wvczNfZW5jLmMJMjAxMC0wMy0z MCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzAsNiArMTcwLDcgQEAgc3RhdGljIGlu dCBzc2wzX2dlbmVyYXRlX2tleV9ibG9jayhTU0wgKgorICNlbmRpZgorIAlrPTA7CisgCUVWUF9N RF9DVFhfaW5pdCgmbTUpOworKwlFVlBfTURfQ1RYX3NldF9mbGFncygmbTUsIEVWUF9NRF9DVFhf RkxBR19OT05fRklQU19BTExPVyk7CisgCUVWUF9NRF9DVFhfaW5pdCgmczEpOworIAlmb3IgKGk9 MDsgKGludClpPG51bTsgaSs9TUQ1X0RJR0VTVF9MRU5HVEgpCisgCQl7CitAQCAtNjE0LDYgKzYx NSw4IEBAIGludCBzc2wzX2RpZ2VzdF9jYWNoZWRfcmVjb3JkcyhTU0wgKnMpCisgCQlpZiAoKG1h c2sgJiBzLT5zMy0+dG1wLm5ld19jaXBoZXItPmFsZ29yaXRobTIpICYmIG1kKSAKKyAJCQl7Cisg CQkJcy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldPUVWUF9NRF9DVFhfY3JlYXRlKCk7CisrCQkJRVZQ X01EX0NUWF9zZXRfZmxhZ3Mocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldLAorKwkJCQlFVlBfTURf Q1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAkJCUVWUF9EaWdlc3RJbml0X2V4KHMtPnMzLT5o YW5kc2hha2VfZGdzdFtpXSxtZCxOVUxMKTsKKyAJCQlFVlBfRGlnZXN0VXBkYXRlKHMtPnMzLT5o YW5kc2hha2VfZGdzdFtpXSxoZGF0YSxoZGF0YWxlbik7CisgCQkJfSAKK0BAIC02NzAsNiArNjcz LDcgQEAgc3RhdGljIGludCBzc2wzX2hhbmRzaGFrZV9tYWMoU1NMICpzLCBpbgorIAkJcmV0dXJu IDA7CisgCX0JCisgCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKKysJRVZQX01EX0NUWF9zZXRfZmxh Z3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJRVZQX01EX0NUWF9j b3B5X2V4KCZjdHgsZCk7CisgCW49RVZQX01EX0NUWF9zaXplKCZjdHgpOworIAlpZiAobiA8IDAp CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL3NzbC9zM19zcnZyLmMuZmlwcyBvcGVuc3NsLTEuMC4w L3NzbC9zM19zcnZyLmMKKy0tLSBvcGVuc3NsLTEuMC4wL3NzbC9zM19zcnZyLmMuZmlwcwkyMDEw LTAyLTI4IDAwOjA0OjEwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvc3NsL3Mz X3NydnIuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE3NTIsNiAr MTc1Miw4IEBAIGludCBzc2wzX3NlbmRfc2VydmVyX2tleV9leGNoYW5nZShTU0wgKnMKKyAJCQkJ aj0wOworIAkJCQlmb3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkKKyAJCQkJCXsKKysJCQkJCUVW UF9NRF9DVFhfc2V0X2ZsYWdzKCZtZF9jdHgsCisrCQkJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9G SVBTX0FMTE9XKTsKKyAJCQkJCUVWUF9EaWdlc3RJbml0X2V4KCZtZF9jdHgsKG51bSA9PSAyKQor IAkJCQkJCT9zLT5jdHgtPm1kNTpzLT5jdHgtPnNoYTEsIE5VTEwpOworIAkJCQkJRVZQX0RpZ2Vz dFVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJ WkUpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wvdDFfZW5jLmMuZmlwcyBvcGVuc3NsLTEu MC4wL3NzbC90MV9lbmMuYworLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3QxX2VuYy5jLmZpcHMJMjAw OS0wNC0xOSAyMDowMzoxMy4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL3NzbC90 MV9lbmMuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE2OSw2ICsx NjksOCBAQCBzdGF0aWMgdm9pZCB0bHMxX1BfaGFzaChjb25zdCBFVlBfTUQgKm1kCisgCisgCUhN QUNfQ1RYX2luaXQoJmN0eCk7CisgCUhNQUNfQ1RYX2luaXQoJmN0eF90bXApOworKwlITUFDX0NU WF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKysJSE1B Q19DVFhfc2V0X2ZsYWdzKCZjdHhfdG1wLCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp OworIAlITUFDX0luaXRfZXgoJmN0eCxzZWMsc2VjX2xlbixtZCwgTlVMTCk7CisgCUhNQUNfSW5p dF9leCgmY3R4X3RtcCxzZWMsc2VjX2xlbixtZCwgTlVMTCk7CisgCWlmIChzZWVkMSAhPSBOVUxM KSBITUFDX1VwZGF0ZSgmY3R4LHNlZWQxLHNlZWQxX2xlbik7CgpkaWZmIC0tZ2l0IGEvb3BlbnNz bC0xLjAuMC12ZXJzaW9uLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC12ZXJzaW9uLnBhdGNoCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYWVhNmEKLS0tIC9kZXYvbnVsbAorKysg Yi9vcGVuc3NsLTEuMC4wLXZlcnNpb24ucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vb3BlbnNzbHYuaC52ZXJzaW9uIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL29wZW5zc2x2LmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9vcGVuc3Nsdi5oLnZlcnNp b24JMjAxMC0wMy0zMCAxMDo1OToyNi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9vcGVuc3Nsdi5oCTIwMTAtMDMtMzAgMTE6MDA6NTIuMDAwMDAwMDAwICswMjAwCitA QCAtMjUsNyArMjUsOCBAQAorICAqIChQcmlvciB0byAwLjkuNWEgYmV0YTEsIGEgZGlmZmVyZW50 IHNjaGVtZSB3YXMgdXNlZDogTU1OTkZGUkJCIGZvcgorICAqICBtYWpvciBtaW5vciBmaXggZmlu YWwgcGF0Y2gvYmV0YSkKKyAgKi8KKy0jZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgx MDAwMDAwZkwKKysvKiB3ZSBoYXZlIHRvIGtlZXAgdGhlIHZlcnNpb24gbnVtYmVyIHRvIG5vdCBi cmVhayB0aGUgYWJpICovCisrI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCTB4MTAwMDAw MDNMCisgI2lmZGVmIE9QRU5TU0xfRklQUworICNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1RFWFQJ Ik9wZW5TU0wgMS4wLjAtZmlwcyAyOSBNYXIgMjAxMCIKKyAjZWxzZQoKZGlmZiAtLWdpdCBhL29w ZW5zc2wuc3BlYyBiL29wZW5zc2wuc3BlYwppbmRleCBiMmE3ODBmLi5lOTQ2MTgwIDEwMDY0NAot LS0gYS9vcGVuc3NsLnNwZWMKKysrIGIvb3BlbnNzbC5zcGVjCkBAIC0xMSw4ICsxMSw2IEBACiAj IDEuMC4wIHNvdmVyc2lvbiA9IDEwCiAlZGVmaW5lIHNvdmVyc2lvbiAxMAogCi0lZGVmaW5lIGJl dGEgYmV0YTUKLQogIyBOdW1iZXIgb2YgdGhyZWFkcyB0byBzcGF3biB3aGVuIHRlc3Rpbmcgc29t ZSB0aHJlYWRpbmcgZml4ZXMuCiAlZGVmaW5lIHRocmVhZF90ZXN0X3RocmVhZHMgJXs/dGhyZWFk czole3RocmVhZHN9fSV7IT90aHJlYWRzOjF9CiAKQEAgLTIzLDEwICsyMSwxMCBAQAogU3VtbWFy eTogQSBnZW5lcmFsIHB1cnBvc2UgY3J5cHRvZ3JhcGh5IGxpYnJhcnkgd2l0aCBUTFMgaW1wbGVt ZW50YXRpb24KIE5hbWU6IG9wZW5zc2wKIFZlcnNpb246IDEuMC4wCi1SZWxlYXNlOiAwLjIyLiV7 YmV0YX0lez9kaXN0fQorUmVsZWFzZTogMSV7P2Rpc3R9CiAjIFdlIHJlbW92ZSBjZXJ0YWluIHBh dGVudGVkIGFsZ29yaXRobXMgZnJvbSB0aGUgb3BlbnNzbCBzb3VyY2UgdGFyYmFsbAogIyB3aXRo IHRoZSBob2JibGUtb3BlbnNzbCBzY3JpcHQgd2hpY2ggaXMgaW5jbHVkZWQgYmVsb3cuCi1Tb3Vy Y2U6IG9wZW5zc2wtJXt2ZXJzaW9ufS0le2JldGF9LXVzYS50YXIuYnoyCitTb3VyY2U6IG9wZW5z c2wtJXt2ZXJzaW9ufS11c2EudGFyLmJ6MgogU291cmNlMTogaG9iYmxlLW9wZW5zc2wKIFNvdXJj ZTI6IE1ha2VmaWxlLmNlcnRpZmljYXRlCiBTb3VyY2U2OiBtYWtlLWR1bW15LWNlcnQKQEAgLTUx LDcgKzQ5LDcgQEAgUGF0Y2gzNDogb3BlbnNzbC0wLjkuNi14NTA5LnBhdGNoCiBQYXRjaDM1OiBv cGVuc3NsLTAuOS44ai12ZXJzaW9uLWFkZC1lbmdpbmVzLnBhdGNoCiBQYXRjaDM4OiBvcGVuc3Ns LTEuMC4wLWJldGE1LWNpcGhlci1jaGFuZ2UucGF0Y2gKIFBhdGNoMzk6IG9wZW5zc2wtMS4wLjAt YmV0YTUtaXB2Ni1hcHBzLnBhdGNoCi1QYXRjaDQwOiBvcGVuc3NsLTEuMC4wLWJldGE1LWZpcHMu cGF0Y2gKK1BhdGNoNDA6IG9wZW5zc2wtMS4wLjAtZmlwcy5wYXRjaAogUGF0Y2g0MTogb3BlbnNz bC0xLjAuMC1iZXRhMy1maXBzY2hlY2sucGF0Y2gKIFBhdGNoNDM6IG9wZW5zc2wtMS4wLjAtYmV0 YTMtZmlwc21vZGUucGF0Y2gKIFBhdGNoNDQ6IG9wZW5zc2wtMS4wLjAtYmV0YTMtZmlwc3JuZy5w YXRjaApAQCAtNTksMTAgKzU3LDkgQEAgUGF0Y2g0NTogb3BlbnNzbC0wLjkuOGotZW52LW5vemxp Yi5wYXRjaAogUGF0Y2g0Nzogb3BlbnNzbC0xLjAuMC1iZXRhNS1yZWFkbWUtd2FybmluZy5wYXRj aAogUGF0Y2g0OTogb3BlbnNzbC0xLjAuMC1iZXRhNC1hbGdvLWRvYy5wYXRjaAogUGF0Y2g1MDog b3BlbnNzbC0xLjAuMC1iZXRhNC1kdGxzMS1hYmkucGF0Y2gKLVBhdGNoNTE6IG9wZW5zc2wtMS4w LjAtYmV0YTUtdmVyc2lvbi5wYXRjaAorUGF0Y2g1MTogb3BlbnNzbC0xLjAuMC12ZXJzaW9uLnBh dGNoCiBQYXRjaDUyOiBvcGVuc3NsLTEuMC4wLWJldGE0LWFlc25pLnBhdGNoCiAjIEJhY2twb3J0 ZWQgZml4ZXMgaW5jbHVkaW5nIHNlY3VyaXR5IGZpeGVzCi1QYXRjaDUzOiBvcGVuc3NsLTEuMC4w LWJldGE1LWNsZWFuc2UucGF0Y2gKIAogTGljZW5zZTogT3BlblNTTAogR3JvdXA6IFN5c3RlbSBF bnZpcm9ubWVudC9MaWJyYXJpZXMKQEAgLTExMiw3ICsxMDksNyBAQCBwYWNrYWdlIHByb3ZpZGVz IFBlcmwgc2NyaXB0cyBmb3IgY29udmVydGluZyBjZXJ0aWZpY2F0ZXMgYW5kIGtleXMKIGZyb20g b3RoZXIgZm9ybWF0cyB0byB0aGUgZm9ybWF0cyB1c2VkIGJ5IHRoZSBPcGVuU1NMIHRvb2xraXQu CiAKICVwcmVwCi0lc2V0dXAgLXEgLW4gJXtuYW1lfS0le3ZlcnNpb259LSV7YmV0YX0KKyVzZXR1 cCAtcSAtbiAle25hbWV9LSV7dmVyc2lvbn0KIAogJXtTT1VSQ0UxfSA+IC9kZXYvbnVsbAogJXBh dGNoMCAtcDEgLWIgLnJlZGhhdApAQCAtMTQxLDcgKzEzOCw2IEBAIGZyb20gb3RoZXIgZm9ybWF0 cyB0byB0aGUgZm9ybWF0cyB1c2VkIGJ5IHRoZSBPcGVuU1NMIHRvb2xraXQuCiAlcGF0Y2g1MCAt cDEgLWIgLmR0bHMxLWFiaQogJXBhdGNoNTEgLXAxIC1iIC52ZXJzaW9uCiAlcGF0Y2g1MiAtcDEg LWIgLmFlc25pCi0lcGF0Y2g1MyAtcDEgLWIgLmNsZWFuc2UKIAogIyBNb2RpZnkgdGhlIHZhcmlv dXMgcGVybCBzY3JpcHRzIHRvIHJlZmVyZW5jZSBwZXJsIGluIHRoZSByaWdodCBsb2NhdGlvbi4K IHBlcmwgdXRpbC9wZXJscGF0aC5wbCBgZGlybmFtZSAle19fcGVybH1gCkBAIC0zODcsNiArMzgz LDkgQEAgcm0gLXJmICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9L2ZpcHNjYW5pc3Rlci4qCiAl cG9zdHVuIC1wIC9zYmluL2xkY29uZmlnCiAKICVjaGFuZ2Vsb2cKKyogVHVlIE1hciAzMCAyMDEw IFRvbWFzIE1yYXogPHRtcmF6QHJlZGhhdC5jb20+IDEuMC4wLTEKKy0gdXBkYXRlIHRvIGZpbmFs IDEuMC4wIHVwc3RyZWFtIHJlbGVhc2UKKwogKiBUdWUgRmViIDE2IDIwMTAgVG9tYXMgTXJheiA8 dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjAtMC4yMi5iZXRhNQogLSBtYWtlIFRMUyB3b3JrIGluIHRo ZSBGSVBTIG1vZGUKIAoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3VyY2VzCmluZGV4IGFjYjEx OWIuLmRhZGFlMmMgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291cmNlcwpAQCAtMSArMSBA QAotNTMxMTYwZDg0MDE3Y2I1MmUzYzIzYjUyY2NhMGQ1Y2YgIG9wZW5zc2wtMS4wLjAtYmV0YTUt dXNhLnRhci5iejIKK2YxZDBkNzMzMjdkNzRiMzAyZjUwMzc2M2JkZGYxY2Y4ICBvcGVuc3NsLTEu MC4wLXVzYS50YXIuYnoyCg==